【问题标题】:ImageIO and URLsImageIO 和 URL
【发布时间】:2012-07-01 16:23:32
【问题描述】:

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

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

如果我将 url(?) "/Pictures/Hello.jpg" 重命名为 "/Pictures/Hello.jpg" 并将源图像重命名为 Hello.jpg ,它就可以正常工作。

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

谢谢,

【问题讨论】:

  • 那么你有什么错误吗?还是例外?
  • "javax.imageio.IIOException: 无法读取输入文件!"是我得到的,但是已经解决了。

标签: java url bufferedimage javax.imageio


【解决方案1】:

以下可能有效。

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

【讨论】:

  • 这也解决了这个问题。非常感谢,我应该使用这个还是上述解决方案?
  • 如果应用程序以 jar/war/... 的形式交付,则 File 将不起作用,因为它会在 zip 格式中读取。所以这是没有错误的额外转弯。
【解决方案2】:
java.net.URL path = getClass().getResource("/Pictures/H ello.jpg");
ImageIO.read(new File(path.toURI())); 

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

【讨论】:

  • 是的,这似乎已经解决了。非常感谢!
  • 太棒了。我很高兴能帮上忙。
【解决方案3】:

如果你想要这种方式,那么你需要对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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-09
    相关资源
    最近更新 更多