getResource ("path") работает в Intellij, но не в jar-файле - PullRequest
0 голосов
/ 08 мая 2018

У меня есть текстовый файл, который мне нужно прочитать, где я использую этот LoC, который работает в Intellij, но не в упакованном jar-файле. Я не предпочитаю не использовать InputStreamReader, так как я создал собственный класс Reader. Я читаю из файла в "src / controllers / MenuController", а WorldState1.txt находится в "src / files / worldstate1.txt".

GameReader.readFile(this.getClass().getClassLoader().getResource("files/WorldState1.txt").getPath());

Есть что-то, что я пропускаю или я неправильно понял getResource ()?

Ответы [ 3 ]

0 голосов
/ 09 мая 2018

По сути, проблема была в том, что я не использовал правильный путь. То, что я закончил, было

 GameReader.readFile(this.getClass().getResourceAsStream("WorldState1.txt"));

Мне также пришлось прочитать файл, используя

new BufferedReader(new InputStreamReader(resource, StandardCharsets.UTF_8)).lines().collect(Collectors.toList());

вместо Files.readAllLines (); так как сейчас это поток. Надеюсь, что это поможет кому-то еще иметь дело с той же проблемой.

0 голосов
/ 14 ноября 2018

У меня была такая же проблема ... Файлы были в моем jar-файле, исправлены, как и ожидалось. Проект работал нормально из среды IDE (Intellij), но Jar не сможет загрузить некоторые из моих активов.

Проблема заключалась в том, что моя рабочая станция для разработки является машиной Windows, которая не учитывает регистр для каталогов и имен файлов, но механизм доступа к файлам, который Java использует для чтения файлов в JAR, чувствителен к регистру.

Итак, там, где у меня был «data / zone / dynamic / myart.png», который работал при запуске из IDE, JAR не работал, пока я не изменил его на «data / Zones / Dynamic / myart.png» ... только эти две ошибки в заглавных буквах делали ресурс недоступным для поиска ... У тех, кто разрабатывает Linux, такой проблемы нет, поскольку вся система чувствительна к регистру, они привыкли быть осторожными с такими вещами.

Итак, если ваш код не может найти ваши ресурсы при запуске из JAR, но файлы есть, дважды проверьте путь / имя файла для правильного регистра.

Помните: содержимое банки легко проверить, просто переименуйте ее в .zip и откройте / извлеките.

Удачи!

0 голосов
/ 08 мая 2018

Прежде всего, не рекомендуется больше использовать getClassLoader () начиная с java 9 (или, возможно, начиная с более новой версии)

Если строка кода, которую вы предоставили из класса MenuController? Если это так, MenuController.class.getResource или this.getClass().getResources указывают вам на его каталог: src/controllers/ и к этому пути вы добавляете files/WorldState1.txt. Вам необходимо построить относительный путь с помощью .. или использовать другую «начальную точку», такую ​​как SomeClassInSRCFolder.class.getResource("files/WorldState1.txt)

...