8

ファイルを開こうとすると、次のエラーが発生します。

java.io.FileNotFoundException: D:\Portable%20Programs\Android%20Development\workspace3\XXX-desktop\bin\World_X.fr (The system cannot find the path specified)
    at java.io.FileInputStream.open(Native Method)
    at java.io.FileInputStream.<init>(Unknown Source)
    at java.util.Scanner.<init>(Unknown Source)

ファイルはディレクトリに存在しますが、まだこのエラーが発生しています。ただし、同じファイルを Eclipse ワークスペース プロジェクトの src フォルダーにコピーすると、そのような例外は返されません (ただし、このメソッドは bin フォルダーに World_X.fr ファイルも作成します)。

私が実際にやろうとしているのは、これを通じて .jar ファイルの絶対的な場所を取得することです:

fileLocation = new String(Main.class.getProtectionDomain().getCodeSource().getLocation().getPath());

そして、「World_X.fr」をfileLocation文字列に追加していますが、これは機能していません。この点で私を助けてください。

4

5 に答える 5

22

file:URLを実際のURLに変換するための推奨される方法Fileは次のとおりです。

File file = new File(url.toURI());

これにより、すべてのチェックと引用符/エスケープが処理されます。

代わりに使用getPath()すると、これらの奇数ビットはあなたに任されます。

于 2012-07-19T17:58:58.863 に答える
10

%20スペースへのエスケープを解除する必要があります。例えば:

fileLocation = new String(
    Main.class.getProtectionDomain().getCodeSource().getLocation().getPath())
    .replaceAll("%20", " ");
于 2012-07-19T16:57:44.573 に答える
6

これがその解決策です。これはJDK1.5以降でのみ機能します。

try { f = new File("somePath".toURI().getPath()); } catch(Exception e) {}
于 2013-05-24T06:48:51.900 に答える
1

確認済みの解決策はかなり古く、この特定のケースでは機能しますが、URLDecoder を使用する方がはるかに便利です。%20 はエンコードされた文字の 1 つにすぎませんが、パスにはさまざまなエンコードされた文字が多数存在する可能性があるためです。

fileLocation = URLDecoder.decode(Main.class.getProtectionDomain().getCodeSource().getLocation().getPath(), "UTF-8");
于 2018-04-30T11:21:44.600 に答える
0

%20を省略して、代わりに通常のスペースを使用してみてください。また、バックスラッシュを使用している場合は、コードでバックスラッシュを使用している場合は、最初にバックスラッシュをエスケープしてください。

于 2012-07-19T16:58:07.500 に答える