gpt4 book ai didi

java - 在 zipentry java 中查找文件

转载 作者:搜寻专家 更新时间:2023-11-01 01:22:54 24 4
gpt4 key购买 nike

我试图在 zip 文件中找到一个文件并将其作为 InputStream 获取。所以这就是我目前正在做的事情,我不确定我是否做对了。

这是一个示例,因为原始版本稍长但这是主要组件...

public InputStream Search_Image(String file_located, ZipInputStream zip) 
throws IOException {
for (ZipEntry zip_e = zip.getNextEntry(); zip_e != null ; zip_e = zip.getNextEntry()) {
if (file_located.equals(zip_e.getName())) {
return zip;
}
if (zip_e.isDirectory()) {
Search_Image(file_located, zip);
}
}
return null;
}

现在我面临的主要问题是 Search_Image 中的 ZipInputStreamZipInputStream 的原始组件相同...

if(zip_e.isDirectory()) {
//"zip" is the same as the original I need a change here to find folders again.
Search_Image(file_located, zip);
}

现在的问题是,如何将 ZipInputStream 作为新的 zip_entry 获取?如果我在我的方法中做错了什么,也请补充,因为我对这个类的逻辑仍然缺乏。

最佳答案

如果您还不需要输入流,您应该使用类 ZipFile 而不必担心输入流。

ZipFile file = new ZipFile("file.zip");
ZipInputStream zis = searchImage("foo.png", file);

public InputStream searchImage(String name, ZipFile file) {
for (ZipEntry e : Collections.list(file.entries())) {
if (e.getName().endsWith(name)) {
return file.getInputStream(e);
}
}
return null;
}

一些事实:

  • 您应该遵循代码中命名方法和变量的约定(Search_Image 不行,searchImage 可以)
  • zip 文件中的目录不包含任何文件,它们只是像其他所有内容一样的条目,因此您不应该尝试递归进入它们)
  • 您应该使用 endsWith(name) 比较您提供的名称,因为该文件可能位于文件夹内,并且 zip 内的文件名始终包含路径

关于java - 在 zipentry java 中查找文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11123528/

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