Javax ImageIO IIOException显然没有原因。

大家好,我有一个Java问题。对于我的高级研究班,我已经差不多完成了,但是我只需要分析生成的图像中的一些数据即可。我不想将其标记为家庭作业,因为它不是任何必需作业的一部分……这是我自己想出的结果。我编写了一个程序,可以逐像素比较两个图像。它对两个目录中的所有.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等中读取,但不会在我的代码中读取。 非常感谢任何帮助,谢谢! 编辑:忘记使用还原的代码...我搞砸了,然后发布了一些错误的版本。进行了修改,以显示原本带有功能代码的问题。为了进一步描述问题:如果您将两个目录都更改为在testExpect2文件夹中查找ExpectedFiles []中的文件列表,它将成功运行。另外,“ 3”在错误发生之前会打印正确的文件名,因此我知道正确的文件已被读取到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);
希望有帮助!
在问题线上,应该不是10英镑而不是11英镑吗?

要回复问题请先登录注册