относительный путь Java - PullRequest
       0

относительный путь Java

1 голос
/ 27 февраля 2012

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

String path = ResourcesLoader.class.getResource("src/i3d/resourcesloader/libraries/lib.txt").toString();

enter image description here

Я использую getResources неправильно? Я даже пытался ввести полный путь, например, "D: \ Workspace ...", двойные обратные косые черты, двойные прямые косые черты, но я получаю исключение нулевого указателя. Единственное, что я не пробовал, это использовать разделитель пути java, но это не должно быть проблемой в данный момент, поскольку он работает в Windows. Что я скучаю?

Спасибо!

Ответы [ 3 ]

3 голосов
/ 27 февраля 2012

getResource поиск через загрузчик классов , поэтому обычно и упрощено в пути к классам. Папка src не находится в пути к классам - она ​​существует только для сборки. В зависимости от вашей системы сборки (ANT, Maven, IDE внутренняя) папка ресурсов может быть объединена в classpath. Вы помещаете свой ресурс непосредственно в исходную папку, которая также будет работать (если процесс сборки копирует все не-Java-ресурсы в выходную папку класса или если исходная папка используется для вывода сгенерированных классов).

/ - это корень ваших ресурсов, если вы используете абсолютные местоположения ресурсов. Это эквивалентно корню в папке src. /i3d/resourcesloader/libraries/lib.txt будет правильным способом доступа к ресурсу.

Было бы лучше разделить ресурсы в отдельной папке, которая объединяется с помощью инструмента сборки (например, в Maven: /src/main/java, /src/main/resources).

1 голос
/ 27 февраля 2012

Вы должны указывать только относительный путь от вашей точки загрузки классов (т.е. без src):

String path = ResourcesLoader.class.getResource("/i3d/resourcesloader/libraries/lib.txt").toString();
1 голос
/ 27 февраля 2012

Кажется, вы используете NetBeans?

Просто создайте папку с именем src\resources, поместите туда свои файлы и позвоните this.getClass().getResource("lib.txt");.

Netbeans упакует это правильно при сборке, а ресурсы будут в главной папке внутри jar, так что вы можете получить без указания их папки.

...