java提供的压缩方法压缩文件夹(可以包含多个子文件夹)
1 /** 2 * 该方法递归实现将多个文件夹压缩在同一个zip包中 然后删除文件夹directoryName 下需要被压缩的文件。 3 * @param directoryName 文件夹路径 4 * @param zos 压缩流 ZipOutputStream 确定压缩包生成的位置 5 * @param basePath 用于传给 ZipEntry 用于压缩包分文件夹第一级传入可以为"" 6 * @throws IOException 7 */ 8 public static void zipDir(String directoryName, ZipOutputStream zos, String basePath) { 9 File file = new File(directoryName); 10 // 每一级别的递归 basePath 不应该被改变所以添加一个 参数 copyBasePath 11 String copyBasePath =""; 12 if (file.exists()) { 13 File[] fileList = file.listFiles(); 14 for (File f : fileList) { 15 if (f.isDirectory()) { 16 // 拼接文件夹目录 17 if (!"".equals(basePath)) { 18 copyBasePath = basePath+File.separator+f.getName(); 19 } else { 20 copyBasePath = f.getName(); 21 } 22 // 继续递归文件夹 23 zipDir(directoryName + File.separator + f.getName(), zos, copyBasePath); 24 } else { 25 // 压缩单个文件到 zos 26 String zipName; 27 if (!"".equals(basePath)) { 28 zipName = basePath + File.separator + f.getName(); 29 } else { 30 zipName = f.getName(); 31 } 32 try { 33 // zos.putNextEntry 开始添加压缩文件 ZipEntry传入的参数 zipName如果包含了层级关系就会生成文件夹 34 zos.putNextEntry(new ZipEntry(zipName)); 35 int len; 36 FileInputStream is = new FileInputStream(f); 37 byte[] bytes = new byte[1024]; 38 while ((len = is.read(bytes)) != -1) { 39 zos.write(bytes, 0, len); 40 } 41 zos.flush(); 42 // zos.closeEntry() 结束当前压缩文件的添加 43 zos.closeEntry(); 44 is.close(); 45 } catch (FileNotFoundException e) { 46 e.printStackTrace(); 47 } catch (IOException e) { 48 e.printStackTrace(); 49 } 50 } 51 Boolean isDelete = f.delete(); 52 System.out.println(f.getName()+"删除是否成功: "+isDelete); 53 } 54 } 55 }
欺骗自己最简单,欺骗自己最困难。
安慰自己最简单,安慰自己最困难。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效