Ответ 1
Думаю, я отвечу на свой вопрос, Thread.currentThread().getContextClassLoader().getResourceAsStream()
работает лучше для меня, особенно когда проект создает зависимость jar для другого веб-проекта.
вот структура моего проекта.
proj
---src
----main
----java
----Main.java
----resources
----res.txt
Я использую плагин m2eclipse с Eclipse. В Main.java у меня есть
File f = new File("res.txt"); System.out.println(f.getAbsolutePath());
Когда я запускаю mvn exec: java, путь, который был распечатан, - "...\proj\res.txt". Как я могу заставить его искать файл ресурсов в каталоге "...\proj\target\classes"?
EDIT:
Спасибо за ответы на мой оригинальный вопрос. У меня есть следующие вопросы:
Итак, в основном я хочу, чтобы основной класс прочитал "res.txt", а затем сгенерировал новый "newres.txt" в каталог ресурсов, чтобы я мог упаковать этот новый "newres.txt" в файл jar на фазе пакета позже. В настоящее время я смонтировал этот exec: java на этапе подготовки пакета. Как создать этот "newres.txt" в каталоге ресурсов без жестко закодированного абсолютного пути или в зависимости от структуры каталогов Maven?
Думаю, я отвечу на свой вопрос, Thread.currentThread().getContextClassLoader().getResourceAsStream()
работает лучше для меня, особенно когда проект создает зависимость jar для другого веб-проекта.
Рисунок. Я бы добавил к ответам.
Вы также можете использовать:
InputStream file = ClassLoader.getSystemResourceAsStream("res.txt");
Try
InputStream IS = Main.class.getResourceAsStream("res.txt");
для доступа к содержимому res.txt
. Обратите внимание на кодировку вашего текстового файла (остерегайтесь умолчаний). Если ваш проект maven установлен на UTF-8, например, убедитесь, что res.txt
закодирован в UTF-8, в противном случае во время выполнения вы получите забавные ошибки.
При запуске из eclipse res.txt
создается в /reader из папки, где запускается eclipse. Следовательно, выход.
Если вы хотите, чтобы код смотрел на файл в определенной папке, которая присутствует в вашем пути к классам, вы должны попробовать использовать getResourceAsStream().
В качестве альтернативы вы можете указать абсолютный путь к файлу.