使用系统首选应用程序在 zip 中显示文件,而无需使用 Java 解压缩



这是我的问题,到目前为止,我已经压缩了一个文件(.zip),并且在另一个应用程序中,我可以请求系统显示一个文件,其中包含系统默认打开"那种"类型的文件的应用程序(.txt ->记事本,.doc(x)-> Word,.psd -> Photoshop等...)(Desktop.getDesktop().open(f);),问题是,我如何请求系统显示zip文件内的文件而不解压缩它?

例如,使用

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

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

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

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

要将 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);

最新更新