Как заставить ImageIO читать из InputStream: Java

Я создал исполняемый файл jar (используя Eclipse), есть набор изображений (.png) файлы, которые должны быть внедрены в банку. Поэтому я добавил исходную папку со всеми изображениями внутри /images папка в проекте . Код должен получить доступ к этим файлам для создания BufferedImage с помощью ImageIO.read(new File(path);

ранее, Чтобы получить путь, который я использовал ClassName.class.getResource(/image/test.png).toURI();

при выполнении jar он выдает ошибку URI не является иерархическим

Итак, теперь я использую ClassName.class.getResourceAsStream(/image/test.png);

но как заставить ImageIO читать из Inputstream ? Я попробовал бросить следующим образом

InputStreamReader resourceBuff=ClassName.class.getResourceAsStream(/image/test.png);
ImageIO.read((ImageInputStream) new InputStreamReader(resourceBuff));

он выдает ошибку InputStreamReader не может быть приведен к ImageInputStream

2 ответов


ImageIO.read() принимает InputStream в качестве параметра, поэтому нет смысла бросать его в ImageInputStream.

во-вторых, вы не можете бросить InputStreamReader объект ImageInputStream, потому что ImageInputStream не имеет ничего общего с InputStreamReader что вы подумали.

getResourceAsStream() возвращает InputStream. Таким образом, вы можете сделать это прямо так.
InputStream resourceBuff = YourClass.class.getResourceAsStream(filepath);
BufferedImage bf = ImageIO.read(resourceBuff);

на ImageIO класс имеет метод утилиты для читать an InputStream и создать BufferedImage.

существует также метод утилиты для создать an ImageInputStream С InputStream.