【问题标题】:ImageIO can't read image input fileImageIO 无法读取图像输入文件
【发布时间】:2019-11-25 18:21:10
【问题描述】:

这是我的第一篇文章。如果我犯了一个明显的错误,请原谅。

BufferedImage img = null;

File file = new File("com/game/assets/badlogic.jpg");

try {
   img = ImageIO.read(file);
} catch (IOException e) {
    e.printStackTrace();
}

这是我的代码,由于某种原因它无法读取我的图像输入文件。 这是错误信息:

javax.imageio.IIOException: Can't read input file!
    at java.desktop/javax.imageio.ImageIO.read(ImageIO.java:1308)
    at com.engine.Main.run(Main.java:41)
    at java.base/java.lang.Thread.run(Thread.java:844)
    at com.engine.Main.start(Main.java:32)
    at com.game.GameManager.main(GameManager.java:51)

我不知道我做错了什么。无论如何,谢谢你,善良的陌生人。

我让它工作了!

BufferedImage img = null;

try {
   img = ImageIO.read(new FileInputStream("/Users/earmalys/Desktop/InteliJ projects/mantengine/src/com/game/assets/badlogic.jpg"));
} catch (IOException e) {
   e.printStackTrace();
}

但是文件路径非常准确。无论如何我可以解决这个问题吗?

【问题讨论】:

  • 尝试给出绝对路径。我认为这是将文件移动到资源并使用此链接mkyong.com/java/java-read-a-file-from-resources-folder 告诉您如何从资源文件夹中读取的问题。
  • 我会同意您拥有的文件引用不正确的假设。如果该位置没有文件,则尝试制作一个并查看它的输出位置。还要检查本地参考的绝对路径,它可能与您的预期不同。一般来说,出于这个原因,我不喜欢绝对路径,如果我需要相对路径,我会在自己的某个地方明确指定基本路径,而不是 exec 路径。
  • 您的路径"com/game/assets/badlogic.jpg" 表示一个资源。不应通过典型的文件 API(例如 File)访问资源。使用专门提供的 API 来访问资源,例如 Class#getResource(String)。然后尝试使用ImageIO#read(URL)
  • 修改我之前的评论,我不喜欢 relative 路径。我确实更喜欢绝对的。

标签: java image bufferedimage ioexception


【解决方案1】:

每当我从文件中获得BufferedImage 时,我发现使用FileInputStream 而不是File 要容易得多。这是一个例子:

try {
    BufferedImage image = ImageIO.read(new FileInputStream("com/game/assets/badlogic.jpg"));
} 
catch (IOException e) { 
    e.printStackTrace();
}

【讨论】:

  • 感谢您的回答!我仍然遇到错误(可能是我的错)。它说“没有这样的文件或目录”。
  • @GoDeadYourself 我不确定是什么原因造成的。可能尝试弄乱文件输入流的参数,因为有时您需要或多或少具体。
  • 别忘了关闭FileInputStream。最简单的选择是使用 try-with-resources:try (var fis = new FileInputStream(...)) { ... } catch (...) { ... }
猜你喜欢
  • 1970-01-01
  • 2018-03-14
  • 1970-01-01
  • 1970-01-01
  • 2017-07-01
  • 1970-01-01
  • 2011-08-28
  • 1970-01-01
相关资源
最近更新 更多