gpt4 book ai didi

java - 找不到java中存在的图像文件

转载 作者:行者123 更新时间:2023-11-30 06:03:55 26 4
gpt4 key购买 nike

我编写了一个函数,它接受 BufferedImage 并将其与硬盘驱动器中预先存在的图像进行比较,检查它们是否相同。

public boolean checkIfSimilarImages(BufferedImage imgA, File B) {

DataBuffer imgAdata = imgA.getData().getDataBuffer();
int sizeA = imgAdata.getSize();

BufferedImage imgB = null;
try {
imgB = ImageIO.read(B);
} catch (IOException ex) {
Logger.getLogger(SupportClass.class.getName()).log(Level.SEVERE, null, ex);
}
DataBuffer imgBdata = imgB.getData().getDataBuffer();
int sizeB = imgBdata.getSize();

if(sizeA == sizeB) {

for(int i = 0; i < sizeA; i++) {

if (imgAdata.getElem(i) != imgBdata.getElem(i)) {

return false;
}
}
}
return true;
}

这会抛出 IOException“无法读取输入文件”。我不知道为什么会发生这种情况。我正在这样调用该函数...

while(support.checkIfSimilarImages(currentDisplay, new File(pathToOriginalImage)) == false) {

System.out.println("Executing while-loop!");
bot.delay(3000);
currentDisplay = bot.createScreenCapture(captureArea);
}

哪里,

String pathToOriginalImage = "‪‪‪‪C:\\Users\\Chandrachur\\Desktop\\Home.jpg";

我可以看到该路径是有效的。但当我在 checkIfSimilarImages 函数内测试 File.exists() 或 File.canRead() 或 File.absoluteFile().exists() 时,一切都返回 false。

我已经研究了我的问题here并尝试了这些建议:

不仅是这个位置,我也尝试过其他各种位置,但都是徒劳。此外,如果我隐藏文件扩展名,实际文件可能是 Home.jpg.jpg ,这也不是问题。

唯一可能的是权限可能不同。我真的不知道如何验证这一点,但没有理由它应该具有一些 java 无法读取的权限。这只是另一个普通的 jpg 文件。

可能是因为我将文件对象引用传递给函数,所以在此过程中引用以某种方式被修改或其他什么。我只是不知道。我已经没有办法测试了...

整个堆栈跟踪如下:

javax.imageio.IIOException: Can't read input file!
at javax.imageio.ImageIO.read(ImageIO.java:1301)
at battlesbot.SupportClass.checkIfSimilarImages(SupportClass.java:77)
at battlesbot.AutomatedActions.reachHomeScreen(AutomatedActions.java:72)
at battlesbot.BattlesBot.main(BattlesBot.java:22)
Exception in thread "main" java.lang.NullPointerException
at battlesbot.SupportClass.checkIfSimilarImages(SupportClass.java:81)
at battlesbot.AutomatedActions.reachHomeScreen(AutomatedActions.java:72)
at battlesbot.BattlesBot.main(BattlesBot.java:22)
C:\Users\Chandrachur\AppData\Local\NetBeans\Cache\8.2\executor-snippets\run.xml:53: Java returned: 1
BUILD FAILED (total time: 11 seconds)

我使用的是 Windows 10,IDE 是 NetBeans。

更新:非常感谢@k5_。他告诉我将其粘贴到路径中,它起作用了。

"C:/Users/Chandrachur/Desktop/Home.jpg";

路径中似乎有一些看不见的字符。但我还是不明白这是什么意思。

最佳答案

通常此类问题是由于访问问题或文件名中的拼写错误造成的。

在这种情况下,有一些不可见的 unicode 字符 x202A在文件名中。 Windows 对话框(从中复制文件路径)使用它们作为写入方向(从左到右)。

显示它们的一种方法是这个循环,它在字符串的开头有 4 个不可见的字符。您还会在调试器中看到它们。

    String x = "‪‪‪‪C:\\Users\\Chandrachur\\Desktop\\Home.jpg";
for(char c : x.toCharArray()) {
System.out.println( c + " " + (int) c);
}

关于java - 找不到java中存在的图像文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51731117/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com