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
.
我有一个 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
ZipFile
.