Загрузка файлов из папки ресурсов с помощью java jar

У меня есть файл download.sh в моей папке src/main/resource в проекте maven, и я читаю его с помощью приведенного ниже кода.

 ClassLoader classLoader = getClass().getClassLoader();
 File file = new File(classLoader.getResource("download.sh").getFile());

Файл читается, когда я запускаю его как отдельное приложение.

Если я запускаю это как приложение, используя jar ex: -

java -jar runScript.jar SCHEMA_NAME

/Users/IdeaProjects/RunScript/target/file:/Users/IdeaProjects/RunScript/target/RunScripts.jar!/download.sh": error=2, Нет такого файла или каталога

Может ли кто-нибудь помочь мне в чтении файла из ресурса при выполнении с jar


person Ganesh    schedule 21.12.2017    source источник
comment
как вы упаковываете банку?   -  person Kirill Simonov    schedule 21.12.2017
comment
запустив mvn clean install @Kirill Simonov   -  person Ganesh    schedule 21.12.2017
comment
вам удалось это решить?   -  person Kirill Simonov    schedule 24.12.2017


Ответы (3)


Я думаю, что эта ошибка возникает, когда вы пытаетесь прочитать файл. Это связано с тем, что ресурсы внутри вашей банки - это не файлы, а потоки. Поэтому вы должны использовать

getClass().getResourceAsStream("download.sh");

а затем прочитайте этот поток, например:

InputStream resourceStream = getClass().getResourceAsStream("download.sh")
BufferedReader br = new BufferedReader(new InputStreamReader(resourceStream));
String line;
while ((line = br.readLine()) != null) {
    // do something
    System.out.println(line);
}
person Kirill Simonov    schedule 21.12.2017

Я думаю, что вы не упаковываете свои ресурсы вместе с банкой. Убедитесь, что ваша банка содержит файл ресурсов (download.sh) с помощью

jar -tvf <yourfile.jar> | grep -i download 
person Sivaswami Jeganathan    schedule 21.12.2017
comment
папка ресурсов не создана в банке. Но все файлы, включенные в непосредственный каталог - person Ganesh; 21.12.2017
comment
@ Ганеш Это не имеет смысла. Если ресурсов нет в JAR, почему вы используете ClassLoader.getResource()? - person user207421; 21.12.2017
comment
@Ganesh, если вы используете maven, попробуйте эти ссылки: stackoverflow.com/questions/6316462/ (или) stackoverflow.com/questions/5637532/ - person Sivaswami Jeganathan; 25.12.2017

Ресурсы — это не файлы. Вы можете получить их URL-адреса или входные потоки, но вы ничего не можете сделать, чтобы превратить ресурс в файле JAR в файл на диске, который вы можете использовать с File. Если не считать распаковки файла JAR, то есть.

person user207421    schedule 21.12.2017