Как мне загрузить файл из папки ресурсов?
Мой проект имеет следующую структуру:
/src/main/java//src/main/resources//src/test/java//src/test/resources/
У меня есть файл в /src/test/resources/test.csv и я хочу загрузить файл из модульного теста в /src/test/java/MyTest.java
/src/test/resources/test.csv
/src/test/java/MyTest.java
У меня есть этот код, который не сработал. Он выдает сообщение "Такого файла или каталога нет".
BufferedReader br = new BufferedReader (new FileReader(test.csv))
Я тоже пробовал это
InputStream is = (InputStream) MyTest.class.getResourcesAsStream(test.csv))
Это также не работает. Он возвращает null. Я использую Maven для сборки своего проекта.
null
Переведено автоматически
Ответ 1
Попробуйте следующий:
ClassLoader classloader = Thread.currentThread().getContextClassLoader();InputStream is = classloader.getResourceAsStream("test.csv");
Если вышеуказанное не работает, в различные проекты был добавлен следующий класс: ClassLoaderUtil1 (код здесь).2
ClassLoaderUtil
Вот несколько примеров использования этого класса:
src\main\java\com\company\test\YourCallingClass.java src\main\java\com\opensymphony\xwork2\util\ClassLoaderUtil.java src\main\resources\test.csv
// java.net.URLURL url = ClassLoaderUtil.getResource("test.csv", YourCallingClass.class);Path path = Paths.get(url.toURI());List<String> lines = Files.readAllLines(path, StandardCharsets.UTF_8);
// java.io.InputStreamInputStream inputStream = ClassLoaderUtil.getResourceAsStream("test.csv", YourCallingClass.class);InputStreamReader streamReader = new InputStreamReader(inputStream, StandardCharsets.UTF_8);BufferedReader reader = new BufferedReader(streamReader);for (String line; (line = reader.readLine()) != null;) { // Process line}
Примечания
Ответ 2
Попробовать:
InputStream is = MyTest.class.getResourceAsStream("/test.csv");
IIRC getResourceAsStream() по умолчанию относится к пакету класса.
getResourceAsStream()
Как отметил @Terran, не забудьте добавить / в начале имени файла
/
Ответ 3
Попробуйте следующие коды в Spring project
ClassPathResource resource = new ClassPathResource("fileName");InputStream inputStream = resource.getInputStream();
Или в проекте, отличном от spring
ClassLoader classLoader = getClass().getClassLoader(); File file = new File(classLoader.getResource("fileName").getFile()); InputStream inputStream = new FileInputStream(file);
Ответ 4
Вот одно быстрое решение с использованием Guava:
import com.google.common.base.Charsets;import com.google.common.io.Resources;public String readResource(final String fileName, Charset charset) throws IOException { return Resources.toString(Resources.getResource(fileName), charset);}
Использование:
String fixture = this.readResource("filename.txt", Charsets.UTF_8)