我需要提取zip而不提取内部zip文件。我需要提取内部拉链,而不是爆炸。
我尝试将其作为zipinputstream读取并将其写入fileoutputstream。但我提取为zip的内部zip文件已损坏且无法读取。
ze = zis.getNextEntry();
while (ze != null) {
if (ze.getName().endsWith(".zip") || ze.getName().endsWith(".ZIP")) {
int len;
while ((len = zis.read(buffer)) != -1) {
outputStream.write(buffer, 0, len);
}
}
要重申这个要求,只提取/爆炸顶级zip并保存子zip文件。提前致谢!!
发布于 2019-06-03 11:14:24
根据您的问题,zip文件包含一个zip文件列表。我在图片下面提供了更好的理解。
如果我的理解是正确的,您只对解压缩包含子zip文件列表的父zip文件感兴趣,如果这是正确的。我提供下面的代码。
import java.io.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
public class TestZipUtil {
public static void unzip(String zipFilePath, String destDirectory) throws IOException {
File srcZipFile = new File(zipFilePath);
int size = (int) srcZipFile.length();
byte[] bufferSize = new byte[size];
File destDir = new File(destDirectory);
if (!destDir.exists()) {
destDir.mkdir();
}
ZipInputStream zipIn = new ZipInputStream(new FileInputStream(zipFilePath));
ZipEntry entry = zipIn.getNextEntry();
while (entry != null) {
String filePath = destDirectory + File.separator + entry.getName();
if (!entry.isDirectory()) {
extractFile(zipIn, filePath, bufferSize);
} else {
File dir = new File(filePath);
dir.mkdir();
}
zipIn.closeEntry();
entry = zipIn.getNextEntry();
}
zipIn.close();
}
private static void extractFile(ZipInputStream zipIn, String filePath, byte[] bytesBuffer)
throws IOException {
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(filePath));
int read = 0;
while ((read = zipIn.read(bytesBuffer)) != -1) {
bos.write(bytesBuffer, 0, read);
}
bos.close();
}
public static void main(String[] args) throws Exception {
unzip(
"yourlocation\\zip-file-name.zip",
"yourlocation\\unzip-folder-location");
}
}
你可以试试。
https://stackoverflow.com/questions/-100006890
复制相似问题