Как получить путь к папке Resource [дубликат]
Как мне указать путь к папке C:\Projects\MyParceXml\Resource У меня такое чувство, что IDEA в упор не видит паку resources. Так и получается Попробовал создать файл:
Path testFile1 = Files.createFile(Paths.get("file1.xml"));
и он появился в паке src: Почему файл создается в папке src? Где это прописывается в IDEA?
Отслеживать
задан 2 авг 2020 в 9:17
349 5 5 серебряных знаков 21 21 бронзовый знак
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Вы не много путаете исходники с скомпилированные кодом. Вы думаете IDEA популярный ide потому что в упор не видит что то? Это не так. Java это не JavaScript когда можно на продакшен нести только исходники и всё будет хорошо.
Вернёмся к вопросу. Java Resources это файла которые будут включены в сборку, а предварительная сборка хранится в target, и во время разработки считайте что они там но явно не привязывайтесь к путям. Надеюсь что ответ помог. Удачи.
По сути если вам нужны ресурсы для тестов то они создаются в тест каталоге по такой же аналогии и доступ к ним такой же как в основном проекте.
Как указать путь к файлу в 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");
Как получить полный путь к файлу из 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?
- Вопрос задан более двух лет назад
- 210 просмотров
Чтение ресурсных файлов
Помимо конфигурационных файлов в приложении бывает удобно хранить и некоторые другие файлы ресурсов. Например, тексты или изображения. Достаточно положить эти файлы в папку 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 более компактный.