//这里用的是apache的zip工具 //我在maven中引入的是ant1.9.4版本 <!-- https://mvnrepository.com/artifact/org.apache.ant/ant ZIP压缩包 --> /*<dependency> <groupId>org.apache.ant</groupId> <artifactId>ant</artifactId> <version>1.9.4</version> </dependency>
import org.apache.tools.zip.ZipEntry; import org.apache.tools.zip.ZipOutputStream; import java.io.*; public class ExportZip { /** * 将目标文件压缩成文件夹 * */ public void compressedFile(String resourcePath,String targetPath) throws IOException { File resourceFile=new File(resourcePath); File targetFile=new File(targetPath); //如果路径不存在自行创建 try { if (!targetFile.exists()) { targetFile.mkdirs(); } String tagetName = resourceFile.getName() + ".zip"; FileOutputStream outputStream = new FileOutputStream(targetFile + "\\" + tagetName); ZipOutputStream zipOut = new ZipOutputStream(new BufferedOutputStream(outputStream)); creatCompressFile(zipOut, resourceFile, ""); //压缩完之后输出流一定要记得关闭,不然会有异常的压缩末端的,多半粗心造成的 zipOut.close(); outputStream.close(); }catch(Exception e){ e.printStackTrace();; } } /*** 生成压缩文件, * 如果是文件夹遍历递归压缩 *@param file 目标文件 * @param out 输出流 * */ public void creatCompressFile(ZipOutputStream out, File file, String dir){ //如果当前时文件夹,进行下一步遍历处理 try { if (file.isDirectory()) { //获取文件夹下文件列表信息 File[] files = file.listFiles(); //将文件夹添加到下一级打包目录 out.putNextEntry(new ZipEntry(dir + "/")); dir = dir.length() == 0 ? "" : dir + "/"; for (int i = 0; i < files.length; i++) { creatCompressFile(out, files[i], dir + files[i].getName()); } } else { //当前是文件的话,直接打包处理 //文件输出流 System.out.println(file.getName()); System.out.println(file.length()); FileInputStream fis = new FileInputStream(file); out.putNextEntry(new ZipEntry(dir)); //进行写操作 int line=0; byte[] buffer=new byte[1024]; while((line=fis.read(buffer))!=-1){ out.write(buffer,0,line); System.out.println(line); } fis.close(); } } catch(Exception e){ e.printStackTrace(); } } public static void main(String[] args){ ExportZip compressedFileUtil = new ExportZip(); try { compressedFileUtil.compressedFile("F:\\test\\57f17e8-a08f-43fa-898c-78f2497", "F:\\zip"); System.out.println("压缩文件已经生成..."); } catch (Exception e) { System.out.println("压缩文件生成失败..."); e.printStackTrace(); } } }