Maven exec: java: как открыть и прочитать файл в каталоге ресурсов? - PullRequest
18 голосов
/ 17 мая 2011

Вот структура моего проекта.

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?

Ответы [ 5 ]

20 голосов
/ 30 мая 2011

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

14 голосов
/ 09 августа 2012

цифру я бы добавил к ответам.

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

InputStream file = ClassLoader.getSystemResourceAsStream("res.txt");
12 голосов
/ 17 мая 2011

Попробуйте

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

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

1 голос
/ 17 мая 2011

При запуске из eclipse, res.txt создается в / reader из папки, где запущено eclipse.Отсюда вывод.

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

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

0 голосов
/ 09 марта 2019

Вот решение пыльника:

String str = "target/classes/res.txt";

InputStream is = new FileInputStream(new File(str));

Если вы выполните exec java в корневой папке, а ваш ресурс скомпилируется в папку target/classes, вы можете написать свой код следующим образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...