【发布时间】:2017-09-17 17:06:55
【问题描述】:
我正在使用以下代码:
private static FileSystem createZipFileSystem(String zipFileName, boolean create) throws IOException {
final Path path = Paths.get(zipFileName);
final URI uri = URI.create("file:" + path.toUri().getPath());
final Map<String,String> env = new HashMap<String,String>();
if(create) {
env.put("create", "true");
}
return FileSystems.newFileSystem(uri, env);
}
当我调用它时(dest 是我项目中的一个文件夹):
createZipFileSystem("dest", true);
我收到以下错误:
Exception in thread "main" java.lang.IllegalArgumentException: Path component should be '/'
at sun.nio.fs.UnixFileSystemProvider.checkUri(UnixFileSystemProvider.java:77)
at sun.nio.fs.UnixFileSystemProvider.newFileSystem(UnixFileSystemProvider.java:86)
at java.nio.file.FileSystems.newFileSystem(FileSystems.java:326)
at java.nio.file.FileSystems.newFileSystem(FileSystems.java:276)
at com.jerney.ziptest.utils.ZipNIO.createZipFileSystem(ZipNIO.java:19)
at com.jerney.ziptest.utils.ZipNIO.getFileSystem(ZipNIO.java:23)
at com.jerney.ziptest.App.main(App.java:15)
我尝试在 URI.create() 方法中使用“jar:file:”、“file:/”和“file://”,并尝试在末尾添加“/”的“dest”,但我每次都得到相同的结果。我在 SO 上看到了另一种解决方案,建议使用不同的 FileSystems 工厂方法,但我特别想使用这个构造函数,并且知道为什么这对我不起作用。
【问题讨论】:
-
你能打印
path.toUri().getPath()吗? -
file:/valid/path/to/dest/ -
所以
"file:" + "file:///valid/path/to/dest/"你觉得它合乎逻辑吗? -
你为什么要创建这样的
URI:final URI uri = URI.create("file:" + path.toUri().getPath());而final URI uri = path.toUri();应该足够了? -
@ThomasKläger,你说得对,它有点迂回,但我检查了你的建议,结果是一样的