Чтение ресурсных файлов
Помимо конфигурационных файлов в приложении бывает удобно хранить и некоторые другие файлы ресурсов. Например, тексты или изображения. Достаточно положить эти файлы в папку resources вашего проекта и в процессе выполнения вы сможете получить к ним доступ.
Например, нам нужно прочитать файл test.txt. Положим его в папку resources вашего проекта (она есть и в maven, и в gradle). Важно положить именно в ту resources, которая относится к самому приложению, а не к тестам, иначе вы не сможете обратиться к файлу.
public class ResourceReader <
<>
public static void main(String[] args) throws Exception var example = new ResourceReader();
var content = example.readTextResource( «test.txt» );
System.out.println(content);
>
public String readTextResource(String filename) throws Exception var uri = getClass().getResource(String.format( «/%s» , filename)).toURI();
return Files.readString(Paths.get(uri));
>
>
Доступ к ресурсам мы получаем через метод getResource(), который имеется у объекта Class. Но доступ к классу из статичного контекста метода main() получить нельзя, поэтому мы сначала создаём экземпляр класса, а затем внутри него уже обращаемся к ресурсу. Обратите внимание, что имя ресурса начинается со слеша. Путь до ресурса указывается от корня папки resources. Для чтения содержимого файла целиком в строку используем метод Files.readString(), появившийся в Java 11. Если у вас более ранняя версия Java, то данный метод будет недоступен. В случае, если файл будет очень большим, также лучше данный метод не использовать, а читать файл с помощью буферизованного потока.
То же самое на kotlin:
fun main() <
val example = ResourceReader()
val content = example.readTextResource( «test.txt» )
println(content)
>
class ResourceReader fun readTextResource(filename: String): String val uri = this .javaClass.getResource( «/$filename» ).toURI()
return Files.readString(Paths.get(uri))
>
>
Ожидаемо, что код на kotlin более компактный.
Как правильно прописывать пути к ресурсам в Java?
Доброго всем дня. В данный момент изучаю java. Разработку веду в intellij idea.
Взялся реализовать простой справочник используя javafx. БД sqlite, для подключения maven подтягивает необходимые библиотеки. Все работает пока запускаешь из idea и перестает работать после сборки в jar. В процессе изучения понял что не тем собирал и с путями у меня полная неразбериха.
Потому вопрос — как правильно прописать пути к папке resources?
В idea когда создаешь maven project имеем следующую структуру
src --main ----java ------Main ----resources ------db --------test.db ------test.fxml --test pom.xml
Как правильно в Main прописать путь к test.fxml и к test.db?
На данный момент fxml (перенес его в корень к Main) получаю через
Parent root = FXMLLoader.load(getClass().getResource("main.fxml"));
Но по мне так не верно
- Вопрос задан более трёх лет назад
- 3973 просмотра
Как получить полный путь к файлу из resource директории в папке test?
Нужно протестировать корректность конвертирования Json. Для этого в директории test создал директорию resources, куда положил файл расширения .json .
В тесте ссылаюсь на него вот так:
class RawMediaPreviewResponseConverterTest < val jsonPath = "src/test/resources/RawMediaPreviewResponse.json" val gson = Gson() @Test fun `media previews response converter should convert images`()< val rawMediaPreviewResponse = gson.fromJson(FileReader(jsonPath),RawMediaPreviewResponse::class.java) . >>
Это хардкод. Если поменять структуру расположения файла, то всё сломается.
Можно ли как то по-другому получить путь на файл .json?
- Вопрос задан более двух лет назад
- 185 просмотров
Как указать путь к файлу в java
Чтобы указать путь к файлу в Java , можно использовать класс java.io.File . Существует несколько способов задания пути:
File file = new File("/path/to/file.txt"); // Здесь /path/to/file.txt - абсолютный путь к файлу.
Относительный путь от текущего каталога:
File file = new File("file.txt"); // Здесь file.txt - файл, расположенный в текущем каталоге.
Относительный путь от корня проекта:
File file = new File("src/main/resources/file.txt");