1

我正在使用 IBM OmniFind,它有一种处理文件路径的有趣方式。如果你有这样的路径:

C:\temp\some §$% path\temp - Sho rtcut.lnk

它变成了这种“URI”(这就是他们所说的......):

file:///C:/temp/some+%C2%A7%24%25+path/temp+-+Sho+rtcut.lnk

这显然似乎是用 URLEncoder.encode 转义的。通常,Java 会从上面的路径构建这种 URI:

file:/C:/temp/some%20%C2%A7$%25%20path/temp%20-%20Sho%20rtcut.lnk
file:/C:/temp/some%20§$%25%20path/temp%20-%20Sho%20rtcut.lnk

现在我很难将这种 URL 编码路径转换为适用于文件句柄的东西。这种方法可以解决问题,尽管它似乎是一个非常值得怀疑的解决方法:

String path = "file:///C:/temp/some+%C2%A7%24%25+path/temp+-+Sho+rtcut.lnk";
URL url = new URL(path);
path = url.toExternalForm().replaceAll("[+]", "%20");

URI uri = new URI(path);
File file = new File(uri);
System.out.println(file.exists());

是否有任何安全的方法可以将 URL 转义文件路径转换为 ​​Java 中的有效 URI?

4

0 回答 0