Не удается найти файл ресурсов после экспорта в исполняемый JAR

У меня есть структура проекта, которая выглядит так:

Tester  
\-- src  
    |-- hello.java  
    \-- vocabulary.csv

Я загружаю файл csv с помощью getResource:

url = this.getClass().getResource("vocabulary.csv");
System.out.println(url.getPath());
new FileReader(url.getPath());

Программа работает полностью нормально, пока я не экспортирую проект в исполняемый файл jar. Несмотря на то, что URL-адрес все еще действителен (он печатает путь вместо нуля), консоль показывает это:

jar:file:/home/malte/Desktop/vocs.jar!/main/vocabulary.csv
Exception in thread "main" java.io.FileNotFoundException: file:/home/malte/Desktop/vocs.jar!/main/vocabulary.csv (No such file or directory)

Можете ли вы объяснить мне, почему это происходит и как я могу решить эту проблему?

P.S. Я использую Xtend вместо чистой Java


person schrobe    schedule 09.08.2013    source источник


Ответы (1)


Вам нужно использовать

InputStream is = this.getClass().getResourceAsStream();

как только вы упаковываете свой источник в банку. У вас есть только один файл: your jar. Ваш vocabulary.csv больше не является отдельным файлом в файловой системе.

Вы можете прочитать больше здесь.

person rocketboy    schedule 09.08.2013
comment
Спасибо! И вместо new FileReader(url.getPath()) теперь я использую new InputStreamReader(is) - person schrobe; 09.08.2013
comment
Это решение не работает. Также пробовал с URL. Я использовал параметр экспорта Eclipse IDE и выбрал Package jar при экспорте всех необходимых зависимостей. - person ha9u63ar; 13.07.2017