前言
最近用java写一个工具,要删除某个zip文件下指定目录。在内置API没有找到,后来在网上找到一篇关于zip4j的使用,里面有讲解zip4j删除指定目录。但是测试发现,有些问题,无法直接获取目录的FileHeader。后来自己改编了下,代码如下。
public static void removeDirFromZipArchive(String file, String removeDir) throws ZipException {
// 创建ZipFile并设置编码
net.lingala.zip4j.core.ZipFile zipFile zipFile = new net.lingala.zip4j.core.ZipFile(file);
zipFile.setFileNameCharset("gbk");//字符集根据环境更换
removeDir += "/";
// 遍历压缩文件中所有的FileHeader, 将指定删除目录下的子文件名保存起来
@SuppressWarnings("unchecked")
List<FileHeader> headersList = zipFile.getFileHeaders();
ArrayList<String> removeHeaderNames = new ArrayList<String>();
for (FileHeader subHeader : headersList) {
String subHeaderName = subHeader.getFileName();
if (subHeaderName.startsWith(removeDir)
&& !subHeaderName.equals(removeDir)) {
removeHeaderNames.add(subHeaderName);
}
}
// 遍历删除指定目录下的所有子文件(所有子文件删除完毕,该目录自动删除)
for (String headerNameString : removeHeaderNames) {
zipFile.removeFile(headerNameString);
}
}
转载地址:https://blog.csdn.net/djun100/article/details/18007099