Javax ImageIO IIOException по-видимому, без причины - PullRequest
0 голосов
/ 19 апреля 2011

Привет всем, у меня проблема с 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 ]

3 голосов
/ 19 апреля 2011
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);

Надеюсь, что помогает!

1 голос
/ 19 апреля 2011

В проблемной строке не должно было быть actualFiles[i] вместо expectedFiles[i]?

...