Java: ZipFile 使用路径

Java: ZipFile using Path

我有一个 Path 用于在虚拟文件系统 (jimfs) 上压缩文件,我需要使用 ZipFile 打开这个压缩文件。

但是ZipFile中没有构造函数来获取Path作为参数,只有File.

但是,我无法从我的 Path 创建一个 File (path.toFile()),因为我得到 UnsupportedOperationException。如何使用 ZipFile 打开我的 zip 文件?或者也许还有其他方法可以处理不在默认文件系统上的 zip 文件?

ZipFile class 仅限于文件系统中的文件。

另一种方法是使用 ZipInputStream。使用

从你的 Path 创建一个 InputStream
Path path = ...
InputStream in = Files.newInputStream(path, openOptions)

并使用 InputStream 创建一个 ZipInputStream。这种方式应该按预期工作:

ZipInputStream zin = new ZipInputStream(in)

所以推荐的使用方式是:

try (ZipInputStream zin = new ZipInputStream(Files.newInputStream(path))) {
    // do something with the ZipInputStream
}

请注意,使用 ZipInputStream 解压缩某些 ZIP 文件。这是 ZIP 格式的技术限制,无法解决。在这种情况下,您必须在文件系统或内存中创建一个临时文件,并使用不同的 ZIP class,例如 ZipFile.