У мене були проблеми з використанням 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"