1

最初に、ここに小さなコード スニペットを示します。

String path = "".equals(url.getPath()) ? "/" : url.getPath();
java.io.File f = new java.io.File(path);

if (!f.exists()) {
    this.code = 404;  // http Not Found
    return;
}

ここで、URL のタイプはjava.net.URLで、その値は次の形式です。

file:///directory1/directory2.../filename

上記のコードは、一般的な URL を処理している場合は 90% の確率で機能しますが、ファイル名に特殊文字が含まれている場合は失敗します。例えば:

/tmp/Marissafolli/Receptionist/Administrative Assistant/Marissa's Resume.txt.txt

このような URL は、存在する場合でも「404」コードを報告します。次のバージョンは、これらの特殊なケースで機能します。

java.io.File f = new java.io.File(url.toURI());

ただしurl.toURI()、j2SE 1.5.0 のみです。したがって、最初のバージョンを使用する必要があります。どうすればそれを機能させることができますか?

4

2 に答える 2

2

これはバグではなく、有効なURLではないという事実です。

手始めに、これらの空白を%20にエスケープする必要があることは明らかです。アポストロフィをどうするかわかりません。 このブログは、それが%27になるべきであることを示唆しています。試してみてください。

または、java.net.URLEncoderを試して、何が得られるかを確認してください。

于 2009-06-05T23:44:59.923 に答える
0

最初にURIを作成してから、toURL()メソッドを呼び出してみませんか。詳細はこちら

[更新]またはさらに良いことに、URIクラスがエンコーディングを自動的に処理するため、ファイルのコンストラクターでURIを直接使用しないのはなぜですか。

于 2009-06-05T23:59:18.257 に答える