Maven exec:java: как открыть и прочитать файл в каталоге ресурсов?
Вот структура моего проекта.
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"?
РЕДАКТИРОВАТЬ:
Спасибо за ответы на мой оригинальный вопрос. У меня есть дополнительные вопросы:
Поэтому в основном я хочу, чтобы класс Main прочитал "res.txt", а затем сгенерировал новый "newres.txt" в каталоге ресурсов, чтобы я мог упаковать этот новый "newres.txt" в файл jar. в фазе пакета позже. В настоящее время я смонтировал этот exec: java на этапе подготовки пакета. Как мне создать этот "newres.txt" в каталоге ресурсов без жестко заданного абсолютного пути или в зависимости от структуры каталогов Maven?
4 ответа
Я думаю, я отвечу на свой вопрос, Thread.currentThread().getContextClassLoader().getResourceAsStream()
работает лучше всего для меня, особенно когда проект создает JAR-зависимость для другого веб-проекта.
Рисунок я бы добавил к ответам.
Вы также можете использовать:
InputStream file = ClassLoader.getSystemResourceAsStream("res.txt");
Пытаться
InputStream IS = Main.class.getResourceAsStream("res.txt");
чтобы получить доступ к содержанию res.txt
, Обратите внимание на кодировку вашего текстового файла (остерегайтесь настроек по умолчанию). Если ваш проект Maven установлен на UTF-8, например, убедитесь, что res.txt
также кодируется в UTF-8, в противном случае вы получите смешные ошибки во время выполнения.
Когда бежать от затмения, res.txt
создается в /reader из папки, в которой запускается eclipse. Отсюда выход.
Если вы хотите, чтобы код просматривал файл в определенной папке, которая присутствует в вашем пути к классам, то вам следует попробовать использовать метод getResourceAsStream().
Также вы можете указать абсолютный путь к файлу.
Вот другое решение:
String str = "target/classes/res.txt";
InputStream is = new FileInputStream(new File(str));
Если вы exec java
в корневой папке, и ваш ресурс будет скомпилирован в target/classes
папку, вы можете написать свой код, как это.