I have a Path
to zip file on virtual filesystem (jimfs) and I need to open this zip file using ZipFile
.
But there is no constructor in ZipFile
to get Path
as argument, only File
.
However, I can't create from my Path
a File
(path.toFile()) because I get UnsupportedOperationException
. How can I open my zip file with ZipFile
? Or maybe there are other ways of working with zip files which are not on default filesystem?
The ZipFile
class is limited to files in the file-system.
An alternative would be to use ZipInputStream
instead. Create an InputStream
from your Path
using
Path path = ...
InputStream in = Files.newInputStream(path, openOptions)
and the use the InputStream
to create an ZipInputStream
. This way should work as expected:
ZipInputStream zin = new ZipInputStream(in)
So the recommended way to use it is:
try (ZipInputStream zin = new ZipInputStream(Files.newInputStream(path))) {
// do something with the ZipInputStream
}
Note that decompressing certain ZIP files using ZipInputStream
will fail because of their ZIP structure. This is a technical limitation of the ZIP format and can't be solved. In such cases you have to create a temporary file in file-system or memory and use a different ZIP class like ZipFile
.