3

由于图像名称中有空格,使用 ImageIO.read 将图像加载到 BufferedImage(示例中的图像)时会遇到一些烦人的问题;

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

如果我将 url(?) "/Pictures/Hello ello.jpg" 重命名为 "/Pictures/Hello.jpg" 并将源图像重命名为 Hello.jpg 它工作得很好。

我已经尝试用 %20 替换空格,如在其他问题中发现的那样,并将 ' ' 的字符替换为 '+'。那么我做错了什么?编码能解决我的问题吗?我该怎么做?

谢谢,

4

3 回答 3

2

以下可能有效。

image = ImageIO.read(getClass().getResourceAsStream("/Pictures/H ello.jpg"));
于 2012-07-01T16:36:17.980 回答
1
java.net.URL path = getClass().getResource("/Pictures/H ello.jpg");
ImageIO.read(new File(path.toURI())); 

这行得通吗?我认为应该。URL 会将空间解码为 %20 并且File构造函数应将其正确处理为URI

于 2012-07-01T16:36:37.970 回答
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

于 2012-07-01T16:41:05.057 回答