package com.jay.test.zip; package com.zip; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.OutputStream; import java.util.ArrayList; import java.util.List; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; public class ZipTest { public static void main(String[] args) throws Exception { packZipFile("D:\\test", "test.zip", "D:\\test", true); } /** * 打包zip文件 * * @param parentFilePath * @param zipFileName * zip文件的名称 比如 test.zip * @param zipFilePath * zip的文件路径比如D:\test * @param zipExistDel * zip文件存在时,是否首先删除 * @throws Exception */ public static void packZipFile(String parentFilePath, String zipFileName, String zipFilePath, boolean zipExistDel) throws Exception { checkNotEmptyParam("请输入合法的以.zip结尾的名字", zipFileName); checkNotEmptyParam("请输入合法的文件路径", zipFilePath); checkNotEmptyParam("请输入合法的需要读取的文件路径", parentFilePath); // 1、根据父路径查询其下面的子文件,并把这些文件按照之前的样子拷贝到zip文件中。 // 2、新建一个zip文件 // 3、新建一份打包说明,把文件备注进去。 File parentFile = new File(parentFilePath); if (!parentFile.exists()) { checkNotEmptyParam("需要读取的文件不存在!!!", null); return; } File zipFile = new File(zipFilePath + File.separator + zipFileName); if (zipFile.exists()) { zipFile.delete(); } List<File> fileList = new ArrayList<File>(); listAllFile(parentFilePath, fileList); if (fileList.size() < 0) { return; } // 需要生成的zip文件 OutputStream out = new FileOutputStream(zipFile); // 读取文件信息 FileInputStream fileInputStream = null; byte[] b = new byte[1024]; // 往外输出zip文件信息 ZipOutputStream zipOutputStream = new ZipOutputStream(out); // 新建zip文件条目 ZipEntry zipEntry = null; for (File fi : fileList) { // 非目录才需要写入 //父目录不需要手动创建。 if (!fi.isDirectory()) { fileInputStream = new FileInputStream(fi); System.out.println(fi.getPath().replace(parentFilePath+"\\","")); System.out.println("name: "+fi.getName()); zipEntry = new ZipEntry(fi.getPath().replace(parentFilePath+"\\","")); zipOutputStream.putNextEntry(zipEntry); while (fileInputStream.read(b) != -1) { zipOutputStream.write(b); }
} }fileInputStream.close();
out.close(); zipOutputStream.closeEntry();
zipOutputStream.close(); } /** * 检测非法参数 * * @param exceptionDes * 异常描述 * @param param * 参数 * @throws Exception * 异常信息 */ private static void checkNotEmptyParam(String exceptionDes, String param) throws Exception { if (param == null || "".equals(param)) { throw new Exception(exceptionDes); } } /** * 根据文件路径获取其下面的文件和目录,支持多层目录获取 * * @param filePath * 文件路径 * @param files * 该目录或文件下所有的文件 */ public static void listAllFile(String filePath, List<File> files) { File file = new File(filePath); File[] files2 = file.listFiles(); if (files2 != null) { for (File fi : files2) { // 如果文件是目录,需要递归获取其下面的文件 if (fi.isDirectory()) { listAllFile(fi.getAbsolutePath(), files); } files.add(fi); } } } }
Java把文件压缩成zip文件
最新推荐文章于 2024-07-15 16:11:16 发布