用于创建具有方括号的 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());