Во время работы с Java-проектами, особенно с Maven, часто возникает необходимость загрузить файл, расположенный в ресурсной папки. Например, это может быть файл с настройками, образцы данных для тестирования или что-нибудь ещё.
Структура проекта может выглядеть примерно так:
/src/main/java/
/src/main/resources/
/src/test/java/
/src/test/resources/
Если в папке /src/test/resources/
есть файл test.csv
, который необходимо загрузить во время выполнения теста, расположенного в /src/test/java/MyTest.java
, возникает вопрос: как это сделать правильно?
Неправильные подходы
Одна из распространённых ошибок — попытка загрузить файл напрямую, как обычно:
BufferedReader br = new BufferedReader(new FileReader("test.csv"));
Этот подход не сработает, так как путь до файла указан неправильно. Java попытается найти файл в корневой директории проекта, а не в папке ресурсов.
Другой неработающий подход — попытаться загрузить ресурс через класс:
InputStream is = MyTest.class.getResourceAsStream("test.csv");
В этом случае Java попытается найти файл в той же пакетной структуре, что и класс MyTest, что тоже не является правильным путём до файла.
Правильный подход
Чтобы загрузить файл из ресурсной папки, нужно использовать метод Class#getResourceAsStream(String)
, указав путь до файла относительно ресурсной папки:
InputStream is = MyTest.class.getResourceAsStream("/test.csv");
В этом случае /
в начале пути говорит Java о том, что нужно искать файл относительно корневой папки ресурсов, а не относительно структуры пакетов.
Итак, подведём итог: для загрузки файлов из ресурсной папки в Java нужно использовать метод getResourceAsStream(String)
, указывая путь до файла относительно корневой папки ресурсов.
Добавить комментарий