Мой проект имеет следующую структуру:
/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))
Я тоже пробовал это
InputStream is = (InputStream) MyTest.class.getResourcesAsStream(test.csv))
Это тоже не работает. Это возвращается null
. Я использую Maven для создания своего проекта.
this.getClass().getResource("/test.csv")
Ответы:
Попробуйте следующее:
Если вышеупомянутое не работает, к различным проектам был добавлен следующий класс: 1 (код здесь ). 2
ClassLoaderUtil
Вот несколько примеров использования этого класса:
Ноты
источник
Object.class.getClassLoader();
из статического контекста, который не работал - это предложение работает - ну почти, оно вводит%20
пробелы, которые дают мнеFileNotFoundException
Пытаться:
IIRC
getResourceAsStream()
по умолчанию относится к пакету класса.Как заметил @Terran, не забудьте добавить
/
в начале имени файлаисточник
String
stackoverflow.com/a/35446009/544045Вот одно быстрое решение с использованием гуавы :
Использование:
источник
Попробуйте текущие коды на проекте Spring
Или на не весеннем проекте
источник
Не весенний проект:
Для проектов Spring вы также можете использовать однострочный код, чтобы получить любой файл в папке ресурсов:
источник
Теперь я иллюстрирую исходный код для чтения шрифта из каталога созданных Maven ресурсов,
Это сработало для меня и надеюсь, что весь исходный код также поможет вам, Наслаждайтесь!
источник
Для Java после 1,7
источник
Если вы используете контекст ClassLoader для поиска ресурса, то это определенно будет стоить производительности приложения.
источник
Импортируйте следующее:
Следующий метод возвращает файл в ArrayList of Strings:
источник
Я столкнулся с той же проблемой .
Файл не был найден загрузчиком классов, что означает, что он не был упакован в артефакт (jar). Вам нужно построить проект . Например, с Maven:
Таким образом, файлы, которые вы добавили в папку ресурсов, попадут в сборку maven и станут доступны для приложения.
Я хотел бы сохранить свой ответ: он не объясняет, как читать файл (другие ответы объясняют это), он отвечает, почему
InputStream
илиresource
был нулевым . Подобный ответ здесь .источник
getResource () работал нормально с файлами ресурсов, размещенными
src/main/resources
только в. Чтобы получить файл, который находится по пути, отличному отsrc/main/resources
сказатьsrc/test/java
вам нужно создать его явно.следующий пример может помочь вам
источник
Работает ли код, когда не выполняется jar-сборка Maven, например, при запуске из вашей IDE? Если это так, убедитесь, что файл действительно включен в банку. Папка ресурсов должна быть включена в файл pom, в
<build><resources>
.источник
Следующий класс может быть использован для загрузки
resource
из,classpath
а также для получения соответствующего сообщения об ошибке в случае, если есть проблема с даннымfilePath
.источник
Я решил эту проблему, добавив
/scr/main/resources
папку в мойJava Build Path
источник
Я получил его работать как на работающем jar, так и в IDE, написав
источник
источник
Вы можете использовать com.google.common.io.Resources.getResource, чтобы прочитать URL-адрес файла, а затем получить содержимое файла, используя java.nio.file.Files, чтобы прочитать содержимое файла.
источник
Я получаю его работать без каких-либо ссылок на «класс» или «ClassLoader».
Допустим, у нас есть три сценария с расположением файла example.file и вашим рабочим каталогом (где выполняется ваше приложение) home / mydocuments / program / projects / myapp:
a) Потомок подпапки к рабочему каталогу: myapp / res / files / example.file
б) подпапка, не являющаяся потомком рабочего каталога: projects / files / example.file
b2) Другая подпапка, не являющаяся потомком рабочего каталога: program / files / example.file
c) корневая папка: home / mydocuments / files / example.file (Linux; в Windows замените home / на C :)
1) Получить правильный путь: а)
String path = "res/files/example.file";
б)String path = "../projects/files/example.file"
б2)String path = "../../program/files/example.file"
в)String path = "/home/mydocuments/files/example.file"
По сути, если это корневая папка, начните путь с косой черты. Если это подпапка, перед именем пути не должно быть косой черты. Если подпапка не является потомком рабочего каталога, вы должны перейти к нему, используя «../». Это говорит системе перейти на одну папку.
2) Создайте объект File, передав правильный путь:
3) Вам теперь хорошо идти
источник