当前位置: 首页 > 面试题库 >

Javax ImageIO IIOException显然没有原因

郑博
2023-03-14
问题内容

大家好,我有一个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
[]中的文件列表,它将成功运行。另外,在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

您忘记了路径分隔符。

最好使用two-File-arg构造函数File

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

希望有帮助!



 类似资料:
  • 问题内容: 我使用boto3连接到AWS的代码遇到错误。该错误仅在昨天下午开始,在上一次我没有收到错误和第一次我得到错误之间,我看不到任何变化。 错误是: 在.aws / config中,我有: 这是我所知道的: 在另一台机器上使用相同的AWS凭证和配置,我看不到错误。 在同一台计算机上使用不同的AWS凭证和配置,我确实看到了错误。 我是我们小组中唯一在任何计算机上出现任何凭据问题的人。 我不认为

  • 问题内容: 我偶尔会看到像这样的Python代码中使用的列表切片语法: 当然,这与以下内容相同: 还是我错过了什么? 问题答案: 就像NXC所说的,Python变量名实际上指向一个对象,而不是内存中的特定位置。 会创建两个指向同一对象的不同变量,因此,更改也会更改。 但是,当您这样做时,它将“切片”列表,并创建一个新列表。的默认值为0,并且位于列表的末尾,因此它将复制所有内容。因此,它使用第一个中

  • 我在库伯内特斯连夜运行了一项工作。当我早上检查它时,它已经失败了。通常,我会检查pod日志或事件来确定原因。然而,pod被删除了,没有事件。 下面是输出: 这是作业配置yaml。它有,但是它从来没有重启过。我也没有设置TTL,所以豆荚永远不会被清理。 我如何调试这个?

  • 我们在Azure应用程序服务计划中遇到CPU峰值,没有明显的原因。这并不是停止服务的原因,但我们想知道什么时候 例如,CPU百分比连续几天保持在0-1%的范围内,但突然它飙升到98%, 45%, 60%并很快回到0-1%的范围内。内存保持在舒适的40-45%水平不变,没有传入请求,没有Web作业,日志中没有异常,没有故障,服务健康正常,没有我们可以指出的原因。我们试图通过kudu找到答案 该应用程

  • 我正在尝试在JavaFX中可视化一个图形。节点应该是交互式的。目前我有一个VBox,并根据我在图形中需要的级别将尽可能多的HBox放入其中。所有HBox都设置为将其子节点定位为中心。子节点代表单个节点,是按钮。VBox本身被放置在StackPane中,Canvas作为StackPane的另一个子节点。然后将此StackPane放置到场景中。我想使用Canvas来绘制节点之间的连接边缘。要获取我使用