java 删除zip文件内指定文件/夹,无需解压-RAR文件

前言

最近用java写一个工具,要删除某个zip文件下指定目录。在内置API没有找到,后来在网上找到一篇关于zip4j的使用,里面有讲解zip4j删除指定目录。但是测试发现,有些问题,无法直接获取目录的FileHeader。后来自己改编了下,代码如下。


  1. public static void removeDirFromZipArchive(String file, String removeDir) throws ZipException {
  2. // 创建ZipFile并设置编码
  3. net.lingala.zip4j.core.ZipFile zipFile zipFile = new net.lingala.zip4j.core.ZipFile(file);
  4. zipFile.setFileNameCharset("gbk");//字符集根据环境更换
  5. removeDir += "/";
  6. // 遍历压缩文件中所有的FileHeader, 将指定删除目录下的子文件名保存起来
  7. @SuppressWarnings("unchecked")
  8. List<FileHeader> headersList = zipFile.getFileHeaders();
  9. ArrayList<String> removeHeaderNames = new ArrayList<String>();
  10. for (FileHeader subHeader : headersList) {
  11. String subHeaderName = subHeader.getFileName();
  12. if (subHeaderName.startsWith(removeDir)
  13. && !subHeaderName.equals(removeDir)) {
  14. removeHeaderNames.add(subHeaderName);
  15. }
  16. }
  17. // 遍历删除指定目录下的所有子文件, 最后删除指定目录(此时已为空目录)
  18. for (String headerNameString : removeHeaderNames) {
  19. zipFile.removeFile(headerNameString);
  20. }
  21. //zipFile.removeFile(removeDir);

java 删除zip文件内指定文件/夹,无需解压

推荐阅读