Получение nullpointerexception при чтении файла из папки ресурсов - PullRequest
0 голосов
/ 22 октября 2018

Я получаю NullpointerException, когда пытаюсь прочитать файл, находящийся в папке src/main/resources.Это происходит, когда я работаю в формате jar.Но когда я компилирую код и запускаю его, он работает нормально в Intellij.

Примечание: я использую пакет sbt для сборки jar и запуска его.

Пожалуйста, помогите.спасибо!

1 Ответ

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

Файлы, которые были упакованы в JAR, больше не доступны из файловой системы.Это можно увидеть, глядя на URL, возвращаемое из myClass.getResource("file.txt"), например:

/home/sria/cde-spark-assembly-1.0.jar!/file.txt

Обратите внимание на !, обозначающее, что файл упакован в JAR.


Это означает, что вам всегда нужно обращаться к файлам ресурсов, используя следующий шаблон:

Для файла в src/main/resources/file.txt:

myClass.getResourceAsStream("file.txt")

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

  1. Добавление файлов в каталог ресурсов увеличит размер файла JAR.
  2. Доступ к файлу невозможен с использованием стандартных операций файловой системы.

В качестве альтернативы вы можете загрузить файл из (настраиваемого) пути в файловой системе, используя, например:

val inputStream = new BufferedInputStream(new FileInputStream(myPath))

( ссылка )

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


Надеюсь, это поможет.

Примечание: И sbt package, и sbt assembly будут упаковывать файлы ресурсов в JAR.

...