Как прочитать файл из класса Java, оба находятся в одном банке - PullRequest
2 голосов
/ 29 марта 2011

У меня следующая структура в банке

myjar.jar -> com -> MYProgram.class

       -> file.txt

В MYProgram я пытаюсь сделать:

getClass().getResourceAsStream("../file.txt")

Я получаю исключение NullpointerException при попытке прочитать входной поток ..

Куда это идет не так?

Ответы [ 2 ]

7 голосов
/ 29 марта 2011

Либо использовать

getClass().getResourceAsStream("/file.txt")

или

getClass().getClassLoader().getResourceAsStream("file.txt")

(ClassLoader.getResourceAsStream всегда принимает «абсолютное» имя ресурса.)

Я не верю, что навигация по «иерархии каталогов» работает в getResourceAsStream - путь либо должен быть относительно данного класса, но без перемещения назад по дереву, либо он должен быть абсолютным для начала.

5 голосов
/ 29 марта 2011

Попробуйте абсолютный путь:

getClass().getResourceAsStream("/file.txt")

Javadoc для getResourceAsStream говорит:

  • Если имя начинается с '/' ('\ u002f'), тогда абсолютное имя ресурса является частью имени, следующей за '/'.
  • В противном случае абсолютное имя имеет следующую форму:

        modified_package_name/name
    

    Где имя_моделированного_пакета - это имя пакета этого объекта с заменой '/' на '.' ( '\ U002e').

Это превратит ваш путь в этот абсолютный путь:

/com/../file.txt

Я не думаю, что запись .. соблюдается. Он буквально ищет вышеуказанный абсолютный путь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...