2009-06-05 28 views
1

首先,我將提供一個很小的代碼片段在這裏:在Java中,如何避免HTTP 404獲取文件://帶有特殊字符的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 

像這樣的網址會報告一個「404」代碼,即使它們存在。下面的版本將這些特殊的情況下工作:

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

url.toURI()僅在J2SE 1.5.0。所以我需要使用第一個版本。我怎樣才能使它工作?

+0

原始網址來自哪裏? – objects 2009-06-06 00:07:50

回答

2

這不是一個錯誤,它是它不是一個有效的URL的事實。

對於初學者,您顯然需要escape這些空白到%20。我不知道你對撇號做了什麼。 This blog表明它應該成爲%27。試試看看。

或者只是嘗試java.net.URLEncoder看看它給你什麼。

+0

我不相信你可以使用URLEncoder,因爲它會編碼包括「://」字符在內的所有內容。 Java本身沒有一個類來完成必要的編碼。 – Eddie 2009-06-05 23:58:15

0

爲什麼不先構造一個URI然後調用toURL()方法。更多信息here

甚至更​​好,爲什麼不直接在File的構造函數中使用URI,因爲URI類負責爲你編碼。

相關問題