【问题标题】:ImageIO can't read input fileImageIO 无法读取输入文件
【发布时间】:2012-10-29 23:09:10
【问题描述】:
public static void imRes(String pat) {
        try {
            BufferedImage bckimg = ImageIO.read(new File("c:/s/deneme.jpg"));
            File s = new File(pat);
            BufferedImage im = ImageIO.read(s);
            BufferedImage im1 = resIm(im);
            BufferedImage finIm = mergIm(im1, bckimg);
            ImageIO.write(finIm, "jpg", new File("c:/s/deneme1.jpg"));
        } catch (IOException e) {

            e.printStackTrace();
        }

这是我的第一篇文章,如果我做错了什么,请原谅。在我尝试从源包中读取图像之前,此代码运行正常。但现在它无法读取任何图像。我究竟做错了什么?还是和eclipse有关?

例外:

javax.imageio.IIOException: Can't read input file!
    at javax.imageio.ImageIO.read(Unknown Source)
    at imRe.imRes(imRe.java:12)
    at imReTest.main(imReTest.java:6)

谢谢...

【问题讨论】:

  • 欢迎来到 StackOverflow!通常,在发布有关此类特定问题的问题时,提供有关您收到的实际错误的信息会很有帮助。您是否在 catch 块中遇到异常?是返回null 的方法之一吗?通过提供更多信息,我们可以帮助您解决确切的问题,而不是猜测。好问题,顺便说一句,+1
  • “源包”是什么意思?你的例外是什么。
  • 它从“deneme.jpg”读取并写入“deneme1.jpg”。这只是一个演示,演示的重点是合并两个图像。
  • 这听起来像图像文件的预期位置不再存在或文件不存在。在尝试加载图像之前尝试添加 System.out.println(new File("c:/s/deneme.jpg").exists()) 以查看文件是否实际可达

标签: java eclipse javax.imageio


【解决方案1】:

如果您使用的是 Windows,请将 / 更改为 \

一种更跨平台的方法可以替代

C: 对应于File.listRoots()[0],每个/ 对应于File.separator

阅读更多关于File api documentation

编辑

(我没看这行,抱歉)

在我尝试从源包中读取图像之前,此代码运行正常

为了从您的 jar 包中获取文件,必须使用getClass().getResource() 方法。

例子:

application-package:
|-Main.java
|-resources
  |-image.jpg

对于上面的目录结构:

BufferedImage im = ImageIO.read(new File(getClass().getResource("/resources/image.jpg").toURI()));

会成功的。

【讨论】:

  • AFAIK,Java 不在乎这个。见this question。如果有的话,这会破坏其他平台的程序。
  • File.separator,而不是File.pathSeparator。路径分隔符用于分隔单个文件或目录,例如在指定类路径或 Windows 上的 %PATH% 变量(UNIX 上的 $PATH)时。
  • 我编辑试图纠正我以前的错误。感谢 cmets
  • 感谢 getResource 代码,但它显示“无法将文件转换为 BufferedImage”。我做错了什么吗?
  • 好吧,你复制粘贴了我的代码,我试图为它做一个例子,我会在下一个版本中复制和粘贴
猜你喜欢
  • 2018-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-02
  • 2013-06-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多