Не удается получить доступ к папке ресурсов при компиляции из .jar в .exe с помощью Launch4j - PullRequest
0 голосов
/ 11 октября 2018

Я создал небольшую Java-программу для академических целей, ее основной задачей является чтение некоторых файлов .txt и представление информации пользователю.Эти файлы находятся в папке ресурсов, в папке src.Программа запускается как задумано при запуске из Eclipse.Используя приложение Launch4j, я смог успешно создать исполняемый файл, который работает нормально и выполняет то, что намечено, до тех пор, пока я не попытаюсь прочитать файлы .txt, которые у меня есть в папке ресурсов, которая, кажется, не в состоянии достичь.

Я предполагаю, что когда я запускаю exe, путь времени выполнения изменится на место, где был создан exe, поэтому я создал программу в папке на рабочем столе и указал этот путь в программе, но это, похоже, не решаетситуация.

В качестве альтернативы я переместил файлы .txt из программы и снова создал exe-файл в папке рабочего стола с указанными файлами .txt, связал программу с этим путем и еще раз это нене работает.

Команда, используемая для получения файлов .txt:

Files.readAllLines(Paths.get(doc)).get(line)

А doc - это просто путь к предполагаемому файлу .txt.

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

1 Ответ

0 голосов
/ 11 октября 2018

Пути к файлам в Eclipse отличаются от путей к файлам в файлах .exe или JAR.

Я позволю этому другому пользователю объяснить это, потому что я ленив: p

Вместо того, чтобы пытаться обратиться к ресурсу как к файлу, просто попросите ClassLoader вернуть InputStream для ресурса вместо этого через getResourceAsStream:

InputStream in = getClass (). GetResourceAsStream ("/ file.txt");BufferedReader reader = новый BufferedReader (новый InputStreamReader (in));Пока ресурс file.txt доступен в пути к классам, этот подход будет работать одинаково независимо от того, находится ли ресурс file.txt в каталоге classes / или в jar.

URI не являетсяИерархическая ситуация возникает потому, что URI для ресурса в jar-файле будет выглядеть примерно так: file: /example.jar! /file.txt.Вы не можете прочитать записи в jar (zip-файле), как если бы это был простой старый файл.

Это хорошо объясняется ответами на:

Как мне прочитатьфайл ресурса из файла jar Java?

файл Jar Java: использовать ошибки ресурса: URI не является иерархическим

Исходное сообщение здесь , все заслуги его автора.

Исправление вашего URL должно позволить вам читать из этого файла, когда вы используете .exe.

ИЗМЕНЕНО ДЛЯ КОРРЕКЦИИ.Спасибо @VGR (см. Комментарии) за исправление моей ошибки.

...