大家好,我有一个Java问题。对于我的高级研究课程,我几乎完成了,但我只需要分析我生成的图像中的一些数据。我不想将其标记为家庭作业,因为它不是任何必需作业的一部分……这是我自己想出的收集结果的东西。我编写了一个程序,逐像素比较两个图像。它对两个目录中的所有 .bmp 文件执行此操作。现在,我的程序将文件名读入一个字符串数组,并检查了所有文件名的值,所以我知道最初可以正常访问目录和文件名。这是有问题的代码:
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 等中读取,但它们不会在我的代码中读取。
非常感谢任何帮助,谢谢!
编辑:忘记使用还原代码...我搞砸了,然后发布了一些错误的版本。已修改以显示其他功能代码的原始问题。进一步描述问题:如果您将两个目录都更改为在 testExpect2 文件夹中查找 expectedFiles[] 中的文件列表,它将成功运行。此外,System.out.println(actualFiles[i]
在错误发生之前打印正确的文件名,所以我知道正确的文件正在被读入字符串数组。