#java
#java
Вопрос:
Я пытаюсь загрузить изображение на Java, но я сталкиваюсь с этой ошибкой:
javax.imageio.IIOException: Can't read input file!
at java.desktop/javax.imageio.ImageIO.read(ImageIO.java:1308)
at Main.main(Main.java:10)
Это мой код:
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
public class Main {
private static BufferedImage tmp;
public static void main(String[] args) {
try {
tmp = ImageIO.read(new File("defaults.png"));
System.out.println("reading completed ");
}catch (IOException e){
System.out.println("Error loading image ");
e.printStackTrace();
}
}
}
Комментарии:
1. Это полное сообщение об исключении, которое вы получаете, или вы вырезали какую-либо часть сообщения об ошибке?
2. я вырезал System.out.println с сообщением об ошибке загрузки изображения только для того, чтобы это было полное исключение
3. Ну, я бы сказал, что либо 1) файл не существует, либо 2) это не файл изображения.
4. Существует ли файл? Можете ли вы открыть его в программе просмотра изображений? У вас есть разрешение на чтение файла?
5. Обратите внимание, что в соответствии с опубликованным вами кодом java будет искать файл
defaults.png
в рабочем каталоге, который является значением, возвращаемымSystem.getProperty("user.dir")
.
Ответ №1:
Это конкретное сообщение об ошибке выдается, когда файл не может быть прочитан. Проверьте исходный код ImageIO.read()
:
if (!input.canRead()) {
throw new IIOException("Can't read input file!");
}
Он использует File.canRead()
метод для проверки, можно ли прочитать файл. В документации по этому методу говорится:
ВОЗВРАТ:
true
тогда и только тогда, когда файл, указанный этим абстрактным путем, существует и может быть прочитан приложением;false
в противном случае
Итак, файл, который вы пытаетесь загрузить, должен существовать, и разрешение должно быть правильным. Когда exists()
метод возвращает false
для вашего File
объекта, вы знаете, что файл, который вы пытаетесь загрузить, не существует (в рабочем каталоге, в котором вы находитесь). Когда файл действительно существует, проблема с разрешением заключается в том, что вашему приложению не разрешено читать файл.
Ответ №2:
В подобном случае я бы предложил:
-
Выйдите из абсолютного пути к файлу, чтобы проверить, что система ищет его там, где вы думаете, что она его ищет
-
Попробуйте прочитать файл с помощью одного из более новых вызовов file API (доступных через класс Files), который, как правило, выдает более понятные ошибки, объясняющие, почему файл не может быть прочитан:
File f = new File("defaults.png"); System.out.println(f.getAbsolutePath()); try { Path p = f.toPath(); Files.readAllBytes(p); } catch (IOException ioex) { ioex.printStackTrace(); }