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 папку, вы можете написать свой код, как это.

Другие вопросы по тегам