【发布时间】:2016-06-21 06:00:35
【问题描述】:
我想获取 zip 文件条目的 URI,以便保留对其内容的引用,而不必保持 zip 文件打开。
因此我使用 zip 文件系统打开 zip 文件并将条目的路径导出为 URI。
Path zipfile = ...
URI uriOfFileInZip;
try(FileSystem fs = FileSystems.newFileSystem(zipfile, null)){
Path fileInZip = fs.getPath("fileInZip.txt");
uriOfFileInZip = fileInZip.toUri();
}
现在我想再次读取文件,所以我尝试打开文件的流。
InputStream is = uriOfFileInZip.toURL().openStream();
只要 zip 文件的路径不包含任何空格,它就可以工作。一旦它包含空格,我就会收到这样的错误
java.io.FileNotFoundException: D:\example\name%20of%20zipfile.zip (The system cannot find the file specified)
zip 中文件的 URI 是
jar:file:///D:/example/name%2520of%2520zipfile.zip!/fileInZip.txt
压缩包的名称是
D:\example\name of zipfile.zip
我想知道%2520 这似乎是 URL 编码的问题,但不应该透明地处理吗?或者它是一个错误?
有解决这个问题的想法吗?
【问题讨论】: