当前位置: 首页 > 知识库问答 >
问题:

如何在java中提取zip文件中的特定文件

尹兴生
2023-03-14

我需要在系统中向客户提供zip文件的视图,并允许客户下载选定的文件

  1. 解析zip文件并显示在网页上。并记住后端的每个zipentry位置(例如file1从字节100宽度1024字节开始)。
  2. 当客户点击下载按钮时下载指定的文件。

现在我已经记住了所有zipentry位置,但是有java zip工具来解压缩zip文件的指定位置吗??API就像解压一样(file, long entryStart, long entryL长度);

共有3个答案

廉博赡
2023-03-14

您可以这样尝试:

ZipFile zf = new ZipFile(file);
try {
  InputStream in = zf.getInputStream(zf.getEntry("file.txt"));
  // ... read from 'in' as normal
} finally {
  zf.close();
}

我还没有试过,但在Java7ZipFileSystem中,您可以像这样尝试提取文件。从zip文件中删除TXT文件。

Path zipfile = Paths.get("/samples/ziptest.zip");
FileSystem fs = FileSystems.newFileSystem(zipfile, env, null);
final Path root = fs.getPath("/file.TXT");
戎泰
2023-03-14

您可以使用以下代码从zip提取特定文件:-

public static void main(String[] args) throws Exception{
        String fileToBeExtracted="fileName";
        String zipPackage="zip_name_with_full_path";
        OutputStream out = new FileOutputStream(fileToBeExtracted);
        FileInputStream fileInputStream = new FileInputStream(zipPackage);
        BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream );
        ZipInputStream zin = new ZipInputStream(bufferedInputStream);
        ZipEntry ze = null;
        while ((ze = zin.getNextEntry()) != null) {
            if (ze.getName().equals(fileToBeExtracted)) {
                byte[] buffer = new byte[9000];
                int len;
                while ((len = zin.read(buffer)) != -1) {
                    out.write(buffer, 0, len);
                }
                out.close();
                break;
            }
        }
        zin.close();

    }

另请参阅此链接:如何从远程存档文件中提取单个文件?

方德宇
2023-03-14

这可以在不干扰字节数组或使用Java7的NIO2的输入流的情况下完成:

public void extractFile(Path zipFile, String fileName, Path outputFile) throws IOException {
    // Wrap the file system in a try-with-resources statement
    // to auto-close it when finished and prevent a memory leak
    try (FileSystem fileSystem = FileSystems.newFileSystem(zipFile, null)) {
        Path fileToExtract = fileSystem.getPath(fileName);
        Files.copy(fileToExtract, outputFile);
    }
}
 类似资料:
  • 问题内容: 我有一个Web程序,希望用户能够在其中导入文件,并且可以从文件中提取某些文件。我发现了两个类库: 和。据我了解,WAR文件是一个特殊的JAR文件,这是一个特殊的ZIP文件。那么使用会更好吗?如果ZIP和JAR文件几乎相同,为什么需要两个不同的库? 问题答案: 如果查看JarFile API,您会发现它是ZipFile类的子类。 jar特定的类大多只是添加jar特定的功能,例如对清单文件

  • 我试图在ZIP文件内创建一个ZIP文件,以重新构建以前在内存中的zip结构,我在Java。 我失败了,因为我得到了一个错误的内部ZIP内创建的初始ZIP文件。文件已损坏。当试图打开它时,我得到一个“文件的意外结局”。 我得到了这个结构: -input.zip--InnerInput.zip 代码使用java Stack和Map在内存中解压。然后它创建input2.zip,内部nput.zip。 总

  • 我有一个zip文件(在一个jar文件中),我想读取init。我知道我可以使用getResourceAsStream(…)轻松读取txt文件,避免“URI不分层”错误。但现在确定我该如何为zip文件做到这一点。 下面是我的代码,但当我将代码导出到runnable jar并运行它时,它会抛出“URI非层次错误”。

  • 我需要从zip存档中包含的所有文件中提取特定的行(第二行)。我的尝试(显然)不起作用。我能找到的与此相关的一切都包括使用特定的字符串/变量来缩小要从存档文件中提取的内容——我不能在我的情况下使用它。 我得到的最接近的结果是从所有文件中提取所有行。 理想情况下,我希望使用类似于然后以获取每个文件的第二行。但这不适用于zipfiles。我需要创建临时文件并使用这种语法吗?或者有办法解决这个问题吗? 我

  • 问题内容: 与此jar命令等效的Java是什么: 我想以编程方式创建此jar文件,因为我不确定命令是否位于我可以运行外部进程的系统路径上。 编辑 :我只想存档(和压缩)目录。不必遵循任何Java标准。即:标准拉链就可以了。 问题答案: // These are the files to include in the ZIP file String[] source = new String[]{“

  • 问题内容: 我的情况是我有一个包含一些文件(txt,png,…)的zip文件,我想直接按它们的名称读取它,我已经测试了以下代码,但没有结果(NullPointerExcepion): resources 是一个包, zipfile 是一个zip文件。 问题答案: 如果您可以确定您的zip文件永远不会打包在另一个jar中,则可以使用以下方法: 要么: 否则,您的选择是: 使用ZipInputStre