用于创建具有方括号的 ZipFileSystem 的 URI 在 Java 中给出错误,如何解决这个问题?
URI Used to Create ZipFileSystem Having A Square Bracket Gives Error in Java, How to Get Past This?
有问题的路径字符串:
"F:\oobar\Foobar\FoobarFoo\barFo\obarFoob\Fo [oba rFoobarFoo] - barF oobar.cbz"
错误:
Exception in thread "main" java.lang.IllegalArgumentException: Illegal character in path at index 52: file:/F:/oobar/Foobar/FoobarFoo/barFo/obarFoob/Fo [oba rFoobarFoo] - barF oobar.cbz
代码:
URI zipDisk = URI.create("jar:file:/" + comic.toString().replace("\", "/").replace(" ", "%20"));
//URI zipDisk = comic.toURI();
Map<String, String> zipProperties = new HashMap<>();
zipProperties.put("create", "true");
try(FileSystem zipFs = FileSystems.newFileSystem(zipDisk, zipProperties)) //Error on this line
{
//Do Stuff
}
我该怎么做才能克服这个错误?更改路径不是一个选项,因为我的文件夹结构不改变是必不可少的。在此先感谢您提供有关此事的所有帮助。
正如您刚刚发现的那样,将文件名转换为 URI 并不像替换文件分隔符和替换任何 space 个字符那么简单。 URI 中有很多字符是不允许的。
当您尝试使用 comic.toURI()
时,您走在了正确的轨道上。也就是说,事实上,将 File
转换为 URI 的唯一正确方法是:
URI zipDisk = URI.create("jar:" + comic.toURI());
有问题的路径字符串:
"F:\oobar\Foobar\FoobarFoo\barFo\obarFoob\Fo [oba rFoobarFoo] - barF oobar.cbz"
错误:
Exception in thread "main" java.lang.IllegalArgumentException: Illegal character in path at index 52: file:/F:/oobar/Foobar/FoobarFoo/barFo/obarFoob/Fo [oba rFoobarFoo] - barF oobar.cbz
代码:
URI zipDisk = URI.create("jar:file:/" + comic.toString().replace("\", "/").replace(" ", "%20"));
//URI zipDisk = comic.toURI();
Map<String, String> zipProperties = new HashMap<>();
zipProperties.put("create", "true");
try(FileSystem zipFs = FileSystems.newFileSystem(zipDisk, zipProperties)) //Error on this line
{
//Do Stuff
}
我该怎么做才能克服这个错误?更改路径不是一个选项,因为我的文件夹结构不改变是必不可少的。在此先感谢您提供有关此事的所有帮助。
正如您刚刚发现的那样,将文件名转换为 URI 并不像替换文件分隔符和替换任何 space 个字符那么简单。 URI 中有很多字符是不允许的。
当您尝试使用 comic.toURI()
时,您走在了正确的轨道上。也就是说,事实上,将 File
转换为 URI 的唯一正确方法是:
URI zipDisk = URI.create("jar:" + comic.toURI());