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"?

EDIT:

Спасибо за ответы на мой оригинальный вопрос. У меня есть следующие вопросы:

Итак, в основном я хочу, чтобы основной класс прочитал "res.txt", а затем сгенерировал новый "newres.txt" в каталог ресурсов, чтобы я мог упаковать этот новый "newres.txt" в файл jar на фазе пакета позже. В настоящее время я смонтировал этот exec: java на этапе подготовки пакета. Как создать этот "newres.txt" в каталоге ресурсов без жестко закодированного абсолютного пути или в зависимости от структуры каталогов Maven?

Ответы

Ответ 1

Думаю, я отвечу на свой вопрос, Thread.currentThread().getContextClassLoader().getResourceAsStream() работает лучше для меня, особенно когда проект создает зависимость jar для другого веб-проекта.

Ответ 2

Рисунок. Я бы добавил к ответам.

Вы также можете использовать:

InputStream file = ClassLoader.getSystemResourceAsStream("res.txt");

Ответ 3

Try

InputStream IS = Main.class.getResourceAsStream("res.txt");

для доступа к содержимому res.txt. Обратите внимание на кодировку вашего текстового файла (остерегайтесь умолчаний). Если ваш проект maven установлен на UTF-8, например, убедитесь, что res.txt закодирован в UTF-8, в противном случае во время выполнения вы получите забавные ошибки.

Ответ 4

При запуске из eclipse res.txt создается в /reader из папки, где запускается eclipse. Следовательно, выход.

Если вы хотите, чтобы код смотрел на файл в определенной папке, которая присутствует в вашем пути к классам, вы должны попробовать использовать getResourceAsStream().

В качестве альтернативы вы можете указать абсолютный путь к файлу.