Javax ImageIO IIOException显然没有任何原因

Javax ImageIO IIOException显然没有任何原因,java,image-processing,bmp,javax.imageio,Java,Image Processing,Bmp,Javax.imageio,大家好,我有一个Java问题。对于我的高级研究班,我已经差不多完成了,但我只需要分析我生成的图像中的一些数据。我不想把它标记为家庭作业,因为它不是任何必修作业的一部分……它是我自己想出来收集结果的东西。我写了一个程序,逐像素比较两幅图像。它对两个目录中的所有.bmp文件执行此操作。现在,我的程序将文件名读取到一个字符串数组中,我检查了所有文件名的值,因此我知道目录和文件名在最初被很好地访问。下面是有问题的代码: public static void main(String[]args)

大家好,我有一个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
publicstaticvoidmain(字符串[]args)引发IOException
{
File actualDir=新文件(“C:\\Users\\Rowe\\Desktop\\testExpect”);
字符串actualFiles[]=actualDir.list();
File expectedDir=新文件(“C:\\Users\\Rowe\\Desktop\\testExpect2”);
字符串expectedFiles[]=expectedDir.list();
int[][]stats=newint[actualFiles.length][6];//保存所有信息
//列、行、总计、红色匹配、应标记为已标记、已标记为已标记
for(int i=0;i
…代码的其余部分

现在,当我将目录更改为相同时,程序将运行,并检测到所有像素100%相同(这是应该的,因此我知道程序执行了我希望它执行的操作)。错误如下:

线程“main”javax.imageio.IIOException中的异常:无法读取输入文件! 位于javax.imageio.imageio.read(未知源) 在PixelCompare.main(PixelCompare.java:22)

我尝试了不同的目录,但没有结果。可能是由于.bmp文件的原因吗?是什么使一组bmp读取正常,而另一组不工作?我可以在其他程序中打开所有必需的文件,因此它们没有损坏。所有属性看起来都是相同的。一个目录是用Gimp手工制作的(这些读取正常),另一个是由基于Java的程序生成的。这些可以在Gimp、Paint、Photoshop等中读取,但它们不会在我的代码中读取

非常感谢您的帮助,谢谢

编辑:忘记使用还原的代码…我把它搞砸了,然后发布了一些错误的版本。修改以显示功能代码的原始问题。进一步描述问题:如果您将两个目录都更改为在testExpect2文件夹中查找expectedFiles[]中的文件列表,它将成功运行。此外,
System.out.println(actualFiles[i]
在错误发生之前打印正确的文件名,因此我知道正确的文件正在读取到字符串数组中

new File("C:\\Users\\Rowe\\workspace\\Senior Research\\testExpect"+expectedFiles[i])
让我们将目录缩短为
C:\\yourDir

C:\\yourDirexpectedFiles1.bmp
不是你想要的:

C:\\yourDir\\expectedFiles1.bmp
您忘记了路径分隔符

最好使用双文件arg构造函数来
文件

File actualImageFile = new File(actualDir, expectedFiles[i]);
actualImage = ImageIO.read(actualImageFile);
希望有帮助

让我们将目录缩短为
C:\\yourDir

C:\\yourDirexpectedFiles1.bmp
不是你想要的:

C:\\yourDir\\expectedFiles1.bmp
您忘记了路径分隔符

最好使用双文件arg构造函数来
文件

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


希望有帮助!

在有问题的行中,不是应该是
实际文件[i]
而不是
预期文件[i]

在有问题的行中,不是应该是
实际文件[i]
而不是
预期文件[i]

我很困惑-我认为代码在任何情况下都不会工作,因为它似乎没有在目录名和文件名之间加反斜杠,这是应该的。其他注意:您使用了两次
expectedFiles[I]
,而
actualFiles[I]
仅用于调试输出。这是可疑的。您确定expectedFiles[]包含相对路径?嘿,伙计们,很抱歉这看起来很奇怪…我从我现在使用的版本复制并粘贴了它。当我在字符串末尾添加双反斜杠时,它会起作用…当我在一个目录中检查功能时,我使用了早期测试中的两次expectedFiles。进行更改以反映这一点。原始问题仍然存在。我感到困惑-我认为代码在任何情况下都不会工作,因为它似乎没有在目录名和文件名之间设置反斜杠,这是应该的。其他注意事项:您正在使用
expectedFiles[I]
两次,而
actualFiles[I]
仅用于调试输出。这是可疑的。您确定expectedFiles吗[]包含相对路径?嘿,伙计们,很抱歉这看起来很奇怪…我从我现在使用的版本复制并粘贴了它。当我在字符串末尾添加双反斜杠时,它会起作用…当我在一个目录中检查功能时,我使用了早期测试中的两次expectedFiles。进行更改以反映这一点。原始问题仍然存在。是的……我这边的复制和粘贴错误。问题仍然存在,请看评论。谢谢提醒!@rownage:那么请尝试sjr的答案。是的……我这边的复制和粘贴错误。问题仍然存在,请看评论。谢谢提醒!@rownage:那么请尝试sjr的答案。那只是我的复制和粘贴不好。我所做的一切在我尝试访问实际文件的第一个BMP文件之前,将正确访问它,即使所有文件都正确地列在实际文件字符串数组中。您能在调用ImageIO之前放置断言吗?例如…
assert-actualmagefile.isFile()&&actualmagefile.canRead()
sjr,我不知道那到底是什么意思