2012-07-01 22 views
3

由於圖像名稱中存在空格,因此在使用ImageIO.read將圖像加載到BufferedImage(示例中的圖像)時遇到了一些煩人的問題;ImageIO和URL

image = ImageIO.read(new File(getClass().getResource("/Pictures/H ello.jpg").getPath())); 

如果我重新命名的網址(?) 「/圖片/ H ello.jpg」 到 「/Pictures/Hello.jpg」 與源圖像Hello.jpg它工作得很好。

我試着用其他問題找到的空格替換爲%20,並將''替換爲'+'的字符。那麼我做錯了什麼?編碼能解決我的問題嗎?我該怎麼做?

謝謝,

+0

所以,做你小號ome錯誤?或例外? –

+0

「javax.imageio.IIOException:無法讀取輸入文件!」是我得到的,但是已經解決了。 –

回答

2

以下可能的作品。

image = ImageIO.read(getClass().getResourceAsStream("/Pictures/H ello.jpg")); 
+0

這也解決了這個問題。非常感謝,我應該使用這個還是以上提到的解決方案? –

+0

如果應用程序以jar/war/...的形式提供,那麼文件將無法運行,因爲這將以zip格式讀取。所以這沒有錯誤的額外轉彎。 –

+0

謝謝!這解決了我遇到的另一個問題。 –

1
java.net.URL path = getClass().getResource("/Pictures/H ello.jpg"); 
ImageIO.read(new File(path.toURI())); 

工作的呢?我認爲它應該。 URL將解碼空間爲%20和File構造應妥善處理它作爲URI

+0

是的,似乎已經修復它。非常感謝! –

+0

太好了。我很高興我得到了幫助。 – nullpotent

1

,如果你想這樣,那麼你需要的URL解碼:

image = ImageIO.read(new File(URLDecoder.decode(getClass().getResource("/Pictures/H ello.jpg").getPath(), "UTF-8"))); 

,但是,如果我需要工作資源,我會使用重載的方法ImageIO.read(URL)或ImageIO.read(InputStream的):

image = ImageIO.read(getClass().getResource("/Pictures/H ello.jpg")); 
image = ImageIO.read(getClass().getResourceAsStream("/Pictures/H ello.jpg")); 

看到apidoc