这是我的问题,到目前为止,我已经压缩了一个文件(.zip),并且在另一个应用程序中,我可以请求系统显示一个文件,其中包含系统默认打开"那种"类型的文件的应用程序(.txt ->记事本,.doc(x)-> Word,.psd -> Photoshop等...)(Desktop.getDesktop().open(f);
),问题是,我如何请求系统显示zip文件内的文件而不解压缩它?
Winrar,您可以看到 zip 的内容,如果您双击其中一个文件,该文件将使用系统的首选/默认查看器/编辑器打开,并且.zip文件保持压缩状态(显然,或者至少您不需要解压缩整个.zip即可访问您想要的文件)是否可以使用 Java 做到这一点?(最好只使用 Java)。
为了能够将文件本身传递给另一个应用程序,您需要将其解压缩到某个地方,否则其他应用程序无法访问它。
实际上这就是WinRAR的工作方式,在Java中,您可以通过ZipFile
和ZipEntry
来完成,是的,您必须肯定地提取它。
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);