使用ImageIO.read将图像加载到BufferedImage(示例中的图像)时遇到一些恼人的问题,因为图像名称中有空格;
image = ImageIO.read(new File(getClass().getResource("/Pictures/H ello.jpg").getPath()));
如果我将网址(?)“/ Pictures / H ello.jpg”重命名为“/Pictures/Hello.jpg”,将源图像重命名为Hello.jpg,则可以正常使用。
我尝试用其他问题上的%20替换空格,并替换''到'+'的替换字符。那么我做错了什么?编码会解决我的问题,我该怎么做?
谢谢,
答案 0 :(得分:2)
以下可能有效。
image = ImageIO.read(getClass().getResourceAsStream("/Pictures/H ello.jpg"));
答案 1 :(得分:1)
java.net.URL path = getClass().getResource("/Pictures/H ello.jpg");
ImageIO.read(new File(path.toURI()));
这有用吗?我认为应该。 URL将空格解码为%20,File
构造函数应将其正确处理为URI
答案 2 :(得分:1)
如果你想这样,那么你需要解码网址:
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