0

这是我的问题,到目前为止,我已经压缩了一个文件(.zip),并且在另一个应用程序中,我可以请求系统显示一个文件,该文件带有系统默认打开“那种”文件的应用程序( .txt -> notepad, .doc(x) -> Word, .psd -> Photoshop, etc...) ( Desktop.getDesktop().open(f);),问题是,我如何请求系统显示 zip 文件中的文件不解压?

例如使用 Winrar,您可以看到 zip 的内容,如果您双击其中的一个文件,该文件将使用系统的首选/默认查看器/编辑器打开,并且 .zip 文件保持压缩状态(显然,或者至少您不需要解压缩整个 .zip 即可访问您想要的文件)是否可以使用 java 来做到这一点?(最好只使用java)。

4

1 回答 1

4

为了能够将文件本身传递给另一个应用程序,您需要将其提取到某个地方,否则其他应用程序无法访问它。

实际上这就是 WinRAR 的工作方式,在 Java 中你可以通过它来完成ZipFileZipEntry是的,你必须确定要提取它。

Java 本身将文件缓存在该属性指定的文件夹中,"java.io.tmpdir"因此我想您可以在处理 zip 条目时尝试查找它们,以便在终止时由 JVM 自动删除它们而不会打扰您自己。

要将 ZipInputStream 管道传输到文件,您可以使用像这样的实用程序函数(我个人使用它来处理 zip 文件,所以我对其进行了测试):

 private static void copy(InputStream in, OutputStream out) throws IOException {
    byte[] buffer = new byte[8192];
    while (true) {
      int readCount = in.read(buffer);
      if (readCount < 0) {
        break;
      }
      out.write(buffer, 0, readCount);
    }
  }

用作

File file = new File(..);
FileOutputStream fos = new FileOutputStream(file);
ZipInputStream zis = zipFile.getInputStream(entry);
copy(zis,fos);
于 2012-11-21T17:59:56.393 回答