ImageIO和URLs

3

在使用ImageIO.read将图片(示例中的图片)加载到BufferedImage中时,由于图片名称中存在空格,导致出现一些烦人的问题。

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

如果我将 URL(?)“/Pictures/H ello.jpg”重命名为“/Pictures/Hello.jpg”,并将源图像重命名为 Hello.jpg,它就可以正常工作。
我已经尝试将空格替换为其他问题中找到的 %20,并将字符' '替换为'+'。那么我做错了什么呢?编码能解决我的问题吗?我该如何做?
谢谢,

你是否遇到了一些错误?或者异常? - Radu Murzea
我遇到了 "javax.imageio.IIOException: Can't read input file!" 的错误,但现在已经解决了。 - Liam B
3个回答

2
以下内容可能有效。
image = ImageIO.read(getClass().getResourceAsStream("/Pictures/H ello.jpg"));

这也解决了问题。非常感谢,我应该使用这个还是前面提到的解决方案? - Liam B
如果应用程序以jar/war/...形式交付,则File将无法正常运行,因为它会在zip格式内进行读取。因此,这是没有错误额外转换的情况。 - Joop Eggen

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

这个能行吗?我认为应该可以。URL会将空格解码为%20,File构造函数应该可以正确处理它作为一个URI


是的,看起来问题已经解决了。非常感谢! - Liam B
太好了。我很高兴能够帮助到您。 - 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"));

请查看 API文档


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接