有時候在java程式碼中讀取檔案,如果檔案所在路徑包含空格、”+“號或者是中文的時候,由於這些特殊的字元會被進行編碼轉譯,所以就會報沒有發現檔案的錯誤,那麼遇到這種錯誤,我們就要把編碼過後的路徑進行解碼,這樣才能正確的找到檔案。主要的解決方法有一下三種方法:

解決方法
1、替換法
比如檔案路徑如果存在空格,那麼會被轉譯成“%20”,那麼就可以利用字串替換,把“%20”傳化成空格,這樣就能正確的找到檔案了。這是這種如此暴力,低階的處理方法,一般有經驗的開發人員都不會採用吧?

2、使用URLDecoder.decode(str,enc)進行解碼
如果空格、中文被轉譯過後,可以使用URLDecoder.decode方法進行解碼,但是這種方法對於路徑中包含“+”號並不能進行正確解碼,因為URLDecoder.decode方法內部如果發現是加號,將會將其轉成空格:
這裡寫圖片描述

3、萬能方法,使用toURI().getPath()
toURI()會跟自己的規則對字串進行編碼,然後又能自動解碼,所以不用自己去關心這些事情,可以自行看下它的原始碼。

演示:
web專案部署在一個tomcat中,路徑為:”D:\Program Files\java\apache-tomcat-6.0.26”
1、字串包含空格:
這裡寫圖片描述

從截圖中可以看到,路徑存在的空格已經被轉成“%20”,如果不對這包含空格的路徑進行解碼,那麼直接讀取檔案是獲取不到的;如果使用了以上第二、第三種方法,則能正確獲取到檔案。

2、路徑中包含“+”
這裡寫圖片描述

從上圖可以看到,如果路徑中包含“+”號,那麼第二種方法就失效了,但是第三種方法還是有效。所以平時使用最好是使用第三種方法比較好。此外,以上介紹的方法,如果部署在linux下也是適用的。