2009-06-05 7 views
1

まず、私はここに小さなコードスニペットを提供します:Javaでは、HTTP 404が特殊文字を含むfile:// URLを取得するのを避けるにはどうすればよいですか?

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 

上記のコードは、90%の作品一般的なURLを処理している時間ですが、ファイル名に特殊文字が含まれていると失敗します。例:

/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でのみです。だから私は最初のバージョンを使用する必要があります。どうすればそれを動作させることができますか?

+0

元のURLはどこから届いていますか? – objects

答えて

2

これはバグではありません。有効なURLではありません。

あなたは明らかに%スタンドで%012にそれらの空白をescapeする必要があります。あなたがアポストロフィで何をするのか分かりません。 This blogは%27になるはずです。それを試してみてください。

または、java.net.URLEncoderを試してみてください。

+0

URLEncoderは「://」文字を含む*すべて*をエンコードするため、使用することはできません。 Java自体には、必要なエンコーディングを行うクラスがありません。 – Eddie

+0

そうかもしれない、エディ。私はそれを自分で試していない。私はちょうど役立つかもしれないAPIの何かの周りに根ざしていた。多分それは良い考えではなかったでしょう。 – duffymo

0

まずURIを作成してから、toURL()メソッドを呼び出してみてください。詳細情報here

[UPDATE]さらに、URIクラスがエンコーディングを処理するため、URIの代わりにFileのコンストラクタを直接使用してください。

関連する問題