java - 在 zipentry java 中查找文件

标签 java zipinputstream

我试图在 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/

相关文章:

带有newInstance的java泛型类型参数

java - 线程的中断标志何时设置?

java - 如何优先考虑eclipse classpath中的jar文件?

java - 使用 ColdFusion 解压 64 位 zip 文件

java - 如何替换 jar 文件中某个目录中的某些文件?

java - hibernate 延迟加载不起作用

java - 一种方法会引发错误,而另一种方法不会引发错误

java - 使用 ZipInputStream 从 docx 文件获取 document.xml

java - 使用 ZipOutputStream 创建的 .war 文件无法部署

java - 机器人 : Zip Folder is invalid