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 список файлов в Ожидаемые файлы [], он будет работать успешно. Так же System.out.println(actualFiles[i]
печатает правильное имя файла до появления ошибки, поэтому я знаю, что правильный файл читается в массив String.
2 ответа
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);
Надеюсь, это поможет!
В проблемной линии, не должно ли быть actualFiles[i]
вместо expectedFiles[i]
?