У меня были проблемы с использованием метода getClass().getResource("filename.txt")
.
После прочтения инструкций по Java-документации, если ваш ресурс не находится в том же пакете, что и класс, из которого вы пытаетесь получить доступ к ресурсу, вы должны указать ему относительный путь, начиная с '/'
. Рекомендуемая стратегия - поместить файлы ресурсов в папку «resources» в корневом каталоге. Так, например, если у вас есть структура:
src/main/com/mycompany/myapp
, затем вы можете добавить папку ресурсов в соответствии с рекомендациями maven в:
src/main/resources
кроме того, вы можете добавить подпапки в папку ресурсов
src/main/resources/textfiles
и скажите, что ваш файл называется myfile.txt
, поэтому у вас есть
src/main/resources/textfiles/myfile.txt
Теперь вот где возникает проблема с тупым путем. Скажем, у вас есть класс в вашем com.mycompany.myapp package
, и вы хотите получить доступ к файлу myfile.txt
из папки ресурсов. Некоторые говорят, что вам нужно дать:
"/main/resources/textfiles/myfile.txt" path
или
"/resources/textfiles/myfile.txt"
оба они не правы. После того, как я запустил mvn clean compile
, файлы и папки будут скопированы в:
myapp/target/classes
папка. Но папки ресурсов нет, просто папки в папке ресурсов. Итак, у вас есть:
myapp/target/classes/textfiles/myfile.txt
myapp/target/classes/com/mycompany/myapp/*
поэтому правильный путь для метода getClass().getResource("")
:
"/textfiles/myfile.txt"
вот оно:
getClass().getResource("/textfiles/myfile.txt")
Это больше не будет возвращать ноль, но вернет ваш класс.
Надеюсь, это кому-нибудь поможет. Мне странно, что папка "resources"
тоже не копируется, а только подпапки и файлы прямо в папке "resources"
. Мне кажется логичным, что папка "resources"
также находится в папке "myapp/target/classes"