ImageIO无法读取输入文件。

11
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)

Thanks...


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

15

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

一个更跨平台的方法是将C:替换为File.listRoots()[0],并且每个/都替换为File.separator

详细信息请参阅文件API文档

编辑

(我没有读到这一行,抱歉)

这段代码在尝试从源包中读取图像之前一直运行良好。

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

示例:

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

对于上述目录结构:

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

能达到目的。


据我所知,Java并不关心这个。请参见此问题。如果有什么问题,这可能会破坏其他平台的程序。 - Brian
2
File.separator,不是File.pathSeparator。路径分隔符用于分隔单个文件或目录,例如在指定Windows上的类路径或%PATH%变量(UNIX上的$PATH)时使用。 - Brian
我进行了编辑,试图纠正之前的错误。感谢您的评论。 - Bruno Vieira
谢谢你提供的getResource代码,但是它显示“无法将File转换为BufferedImage”。我做错了什么吗? - s.alem
好的,你复制粘贴了我的代码,我正在尝试为它制作一个示例,我会在下一版中使其可复制和粘贴。 - Bruno Vieira
哦,我的错误,抱歉。这是一个“静态”问题,但是这是因为我的代码。我想我应该改变结构。但现在我知道了getClass().getResource()方法。非常感谢... - s.alem

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接