gpt4 book ai didi

java - 无法读取 ZipFile.getInputStream(ZipEntry) 方法返回的 ZipInputStream

转载 作者:行者123 更新时间:2023-12-01 16:14:45 25 4
gpt4 key购买 nike

我正在尝试从 zip 文件中读取提取给定的文件。 Zip 文件还包含目录和子目录。我尝试了 Java7 nio 文件 api,但由于我的 zip 也有子目录,我需要提供完整的路径来提取文件,这不适合我的场景。因为我必须从用户那里提取文件输入。我一直在尝试下面的代码,但不知何故,ZipInputStream 的读取方法没有读取任何内容到缓冲区。在调试时,我发现 ZipInputStream 中的 ZipEntry 对象值为 null,因为它的 read 方法只是返回 -1。但现在我陷入困境,因为我无法弄清楚如何为其设置该值。

try(OutputStream out=new FileOutputStream("filetoExtract");) {
zipFile = new ZipFile("zipFile");
Enumeration<? extends ZipEntry> e = zipFile.entries();
while (e.hasMoreElements()) {
ZipEntry entry = e.nextElement();
if (!entry.isDirectory()) {
String entryName = entry.getName();
String fileName = entryName.substring(entryName.lastIndexOf("/") + 1);
System.out.println(i++ + "." + entryName);
if (searchFile.equalsIgnoreCase(fileName)) {
System.out.println("File Found");
BufferedInputStream bufferedInputStream = new BufferedInputStream(zipFile.getInputStream(entry));
ZipInputStream zin = new ZipInputStream(bufferedInputStream);
byte[] buffer = new byte[9000];
int len;
while ((len = zin.read(buffer)) != -1) {
out.write(buffer, 0, len);
}
out.close();
break;
}
}
}
} catch (IOException ioe) {
System.out.println("Error opening zip file" + ioe);
}

请告诉我我在这里做错了什么。谢谢

编辑:经过更多调试后,我发现 ZipFile 类具有类似名称的内部类(ZipFileInputStream)。因此它正在创建它的对象而不是外部 ZipFileInputStream 类。所以我尝试了下面的代码,效果很好。但我不太明白这里的事情,发生了什么。如果有人可以帮助我理解幕后的逻辑,那就太好了。

//  BufferedInputStream bufferedInputStream = new 
//BufferedInputStream(zipFile.getInputStream(entry));
//ZipInputStream zin = new ZipInputStream(bufferedInputStream);
InputStream zin= zipFile.getInputStream(entry);

最佳答案

第二行是不必要的,因为 zipFile.getInputStream(entry) 已经返回一个表示解压缩数据的 InputStream 。因此,没有必要(或者事实上这是错误的)将该 InputStream 包装在另一个 ZipInputStream 中:

BufferedInputStream bufferedInputStream = new BufferedInputStream(zipFile.getInputStream(entry));
ZipInputStream zin = new ZipInputStream(bufferedInputStream);

关于java - 无法读取 ZipFile.getInputStream(ZipEntry) 方法返回的 ZipInputStream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62434012/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com