前言
最近用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);
- }
- //zipFile.removeFile(removeDir);