java 压缩解压文件
发布时间:2020-12-15 00:13:22 所属栏目:Java 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;imp
以下代码由PHP站长网 52php.cn收集自互联网 现在PHP站长网小编把它分享给大家,仅供参考 import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.Enumeration; import org.apache.tools.zip.ZipEntry; import org.apache.tools.zip.ZipFile; import org.apache.tools.zip.ZipOutputStream; /** * ZIP文件压缩和解压(要使用apache ant.jar以处理中文乱码) * * @author sunjun * @version 2.0 */ public class ZipUtil { /** * 压缩文件file成zip文件zipFile * * @param file * 要压缩的文件 * @param zipFile * 压缩文件存放地方 * @throws Exception */ public static void zip(File file,File zipFile) throws Exception { ZipOutputStream output = null; try { output = new ZipOutputStream(new FileOutputStream(zipFile)); // 顶层目录开始 zipFile(output,file,""); } catch (Exception ex) { ex.printStackTrace(); } finally { // 关闭流 if (output != null) { output.flush(); output.close(); } } } /** * 压缩文件为zip格式 * * @param output * ZipOutputStream对象 * @param file * 要压缩的文件或文件夹 * @param basePath * 条目根目录 * @throws IOException */ private static void zipFile(ZipOutputStream output,File file,String basePath) throws IOException { FileInputStream input = null; try { // 文件为目录 if (file.isDirectory()) { // 得到当前目录里面的文件列表 File list[] = file.listFiles(); basePath = basePath + (basePath.length() == 0 ? "" : "/") + file.getName(); // 循环递归压缩每个文件 for (File f : list) zipFile(output,f,basePath); } else { // 压缩文件 basePath = (basePath.length() == 0 ? "" : basePath + "/") + file.getName(); // System.out.println(basePath); output.putNextEntry(new ZipEntry(basePath)); input = new FileInputStream(file); int readLen = 0; byte[] buffer = new byte[1024 * 8]; while ((readLen = input.read(buffer,1024 * 8)) != -1) output.write(buffer,readLen); } } catch (Exception ex) { ex.printStackTrace(); } finally { // 关闭流 if (input != null) input.close(); } } /** * 解压zip文件 * * @param zipFilePath * zip文件绝对路径 * @param unzipDirectory * 解压到的目录 * @throws Exception */ public static void unzip(String zipFilePath,String unzipDirectory) throws Exception { // 定义输入输出流对象 InputStream input = null; OutputStream output = null; try { // 创建文件对象 File file = new File(zipFilePath); // 创建zip文件对象 ZipFile zipFile = new ZipFile(file); // 创建本zip文件解压目录 String name = file.getName().substring(0,file.getName().lastIndexOf(".")); File unzipFile = new File(unzipDirectory + "/" + name); if (unzipFile.exists()) unzipFile.delete(); unzipFile.mkdir(); // 得到zip文件条目枚举对象 Enumeration zipEnum = zipFile.getEntries(); // 定义对象 ZipEntry entry = null; String entryName = null,path = null; String names[] = null; int length; // 循环读取条目 while (zipEnum.hasMoreElements()) { // 得到当前条目 entry = (ZipEntry) zipEnum.nextElement(); entryName = new String(entry.getName()); // 用/分隔条目名称 names = entryName.split("\/"); length = names.length; path = unzipFile.getAbsolutePath(); for (int v = 0; v < length; v++) { if (v < length - 1) // 最后一个目录之前的目录 FileUtil.createDirectory(path += "/" + names[v] + "/"); else { // 最后一个 if (entryName.endsWith("/")) // 为目录,则创建文件夹 FileUtil.createDirectory(unzipFile .getAbsolutePath() + "/" + entryName); else { // 为文件,则输出到文件 input = zipFile.getInputStream(entry); output = new FileOutputStream(new File(unzipFile .getAbsolutePath() + "/" + entryName)); byte[] buffer = new byte[1024 * 8]; int readLen = 0; while ((readLen = input.read(buffer,1024 * 8)) != -1) output.write(buffer,readLen); } } } } } catch (Exception ex) { ex.printStackTrace(); } finally { // 关闭流 if (input != null) input.close(); if (output != null) { output.flush(); output.close(); } } } /** * 测试 * * @param args * @throws Exception */ public static void main(String[] args) throws Exception { unzip("d:/桌面.zip","f:/"); System.out.println("over...................."); zip(new File("C:/a"),new File("d:/桌面.zip")); System.out.println("over.............."); } } 以上内容由PHP站长网【52php.cn】收集整理供大家参考研究 如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |