2012-07-01 4 views
3

Имея некоторые неприятные проблемы с загрузкой изображений в BufferedImage (изображение в примере) с использованием ImageIO.read из-за наличия пробелов в имени изображения;ImageIO и URL-адреса

image = ImageIO.read(new File(getClass().getResource("/Pictures/H ello.jpg").getPath())); 

Если я переименовать URL (?) "/ Фотографии/H ello.jpg" к "/Pictures/Hello.jpg" и исходное изображение, чтобы Hello.jpg она работает просто отлично.

Я попытался заменить пробелы на% 20, как найдено по другим вопросам, а также заменить символ '' на '+'. Так что я делаю неправильно? Будет ли кодирование решить мою проблему и как я это сделаю?

Thanks,

+0

Так что вы получите S ошибка ome? Или Исключение? –

+0

"javax.imageio.IIOException: не удается прочитать входной файл!" было то, что я получал, однако было решено. –

ответ

2

Возможно, возможно работает.

image = ImageIO.read(getClass().getResourceAsStream("/Pictures/H ello.jpg")); 
+0

Это также устраняет проблему. Спасибо тонну, следует ли использовать это или удовлетворительное решение? –

+0

Если приложение доставлено как jar/war/..., то File не будет функционировать, поскольку это будет чтение внутри формата zip. Так что это без лишнего поворота. –

+0

Спасибо! Это решает другую проблему, которую я испытывал. –

1
java.net.URL path = getClass().getResource("/Pictures/H ello.jpg"); 
ImageIO.read(new File(path.toURI())); 

ли эта работа? Думаю, так и должно быть. URL будет декодировать пространство как% 20 и File конструктор должен обработать его должным образом как URI

+0

Да, похоже, это исправлено. Большое спасибо! –

+0

Отлично. Я рад, что помог. – nullpotent

1

если вы хотите этот путь, то вам нужно декодировать URL:

image = ImageIO.read(new File(URLDecoder.decode(getClass().getResource("/Pictures/H ello.jpg").getPath(), "UTF-8"))); 

, но, если мне нужно работать с ресурсы, я бы использовать перегруженный метод ImageIO.read (URL) или ImageIO.read (InputStream):

image = ImageIO.read(getClass().getResource("/Pictures/H ello.jpg")); 
image = ImageIO.read(getClass().getResourceAsStream("/Pictures/H ello.jpg")); 

см apidoc

Смежные вопросы