Javax ImageIO IIO例外显然没有理由

嘿所有,我有一个Java问题。 对于我的高级研究class,我已经完成了,但我只需要分析我生成的图像中的一些数据。 我不想把它标记为作业,因为它不是任何必要任务的一部分……这是我自己想出来收集结果的东西。 我写了一个程序,逐个像素地比较两个图像。 它为两个目录中的所有.bmp文件执行此操作。 现在,我的程序将文件名读入一个String数组,并检查了所有文件名的值,所以我知道目录和文件名最初是正常访问的。 这是有问题的代码:

public static void main(String[]args) throws IOException { File actualDir = new File("C:\\Users\\Rowe\\Desktop\\testExpect"); String actualFiles[] = actualDir.list(); File expectedDir = new File("C:\\Users\\Rowe\\Desktop\\testExpect2"); String expectedFiles[] = expectedDir.list(); int[][] stats = new int[actualFiles.length][6]; // Holds all info //Columns, Rows, Total, redMatches, shouldaBeenRed, badRed for(int i = 0; i < actualFiles.length; i++) { BufferedImage actualImage = null; System.out.println(actualFiles[i]); //THIS PRINTS PROPERLY System.out.println(System.getProperty("user.dir")); //FOR TESTING actualImage = ImageIO.read(new File("C:\\Users\\Rowe\\Desktop\\testExpect\\"+actualFiles[i])); //ERROR HERE BufferedImage expectedImage = null; expectedImage = ImageIO.read(new File("C:\\Users\\Rowe\\Desktop\\testExpect2\\"+expectedFiles[i])); //THIS IMAGE WORKS 

...rest of code

现在,当我将目录更改为相同时,程序运行,并检测所有像素是100%相似(因为它应该,所以我知道程序做了我想要它做的事情)。 这是错误:

Exception in thread "main" javax.imageio.IIOException: Can't read input file! at javax.imageio.ImageIO.read(Unknown Source) at PixelCompare.main(PixelCompare.java:22)

我试过不同的目录无济于事。 它可能是关于.bmp文件的吗? 什么可以使一组BMP读得很好而另一组不起作用? 我可以在其他程序中打开所有必需的文件,因此它们没有被破坏。 所有属性看起来都是一样的。 一个目录是在Gimp中手工制作的(这些读取正常),另一个目录是由基于Java的程序生成的。 这些可以在Gimp,Paint,Photoshop等中读取,但它们不会在我的代码中读取。

非常感谢任何帮助,谢谢!

编辑:忘了使用恢复的代码…我搞砸了然后发布了一些不好的版本。 修改以显示其他function代码的原始问题。 要进一步描述问题:如果您更改了两个目录以在expectedExpect2文件夹中查找expectedFiles []中的文件列表,它将成功运行。 此外, System.out.println(actualFiles[i]在错误发生之前打印正确的文件名,因此我知道正在将文件读入String数组中。

 new File("C:\\Users\\Rowe\\workspace\\Senior Research\\testExpect"+expectedFiles[i]) 

让我们将目录缩短为C:\\yourDir 。 你的代码会产生类似的路径

 C:\\yourDirexpectedFiles1.bmp 

不是你想要的:

 C:\\yourDir\\expectedFiles1.bmp 

你忘了路径分隔符了。

使用两个File-arg构造函数更好的File

 File actualImageFile = new File(actualDir, expectedFiles[i]); actualImage = ImageIO.read(actualImageFile); 

希望有所帮助!

在有问题的行中,不应该是actualFiles[i]而不是expectedFiles[i]