私は 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に変換する安全な方法はありますか?