2012-07-01 23 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