У меня возникли проблемы с использованием getClass().getResource("filename.txt")
метода. После прочтения инструкций документации Java, если ваш ресурс не находится в том же пакете, что и класс, из которого вы пытаетесь получить доступ к ресурсу, тогда вы должны указать ему относительный путь, начиная с '/'
. Рекомендуемая стратегия - поместить файлы ресурсов в папку «ресурсы» в корневом каталоге. Так, например, если у вас есть структура:
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")
Это больше не будет возвращать null, но вернет ваш класс. Надеюсь, это кому-нибудь поможет. Мне странно, что "resources"
копируется не папка, а только подпапки и файлы прямо в "resources"
папке. Мне казалось бы логичным, что "resources"
папка также будет находиться в"myapp/target/classes"