Предположим, что у меня есть структура проекта следующим образом:
+ src
---+ main
------+ java
------+ resources
Как я могу определить экземпляр java.io.File
который может читать xml из папки ресурсов?
Нет, используйте InputStream, путь, начинающийся с ресурсов.
InputStream in = getClass().getResourceAsStrem("/.../...");
Или URL-адрес
URL url = getClass().getResource("/.../...");
Таким образом, если приложение упаковано в банку (регистры, чувствительные к регистру!), Это тоже работает. URL в этом случае:
"jar:file://... .jar!/.../..."
Если вам нужен ресурс как файл, например, для записи, вам нужно скопировать ресурс в качестве исходного шаблона в какой-то каталог вне приложения, например System.getProperty("user.home")
.
Path temp = Files.createTempFile("pref", "suffix.dat");
Files.copy(getClass().getResourceAsStream(...), temp);
File file = temp.toFile();
Это зависит от того, что работает ваш рабочий каталог.
Вы можете получить свой рабочий каталог во время выполнения через System.getProperty("user.dir");
Здесь ссылка с дополнительной информацией
После этого создайте относительный путь к файлу, указывающий на вашу папку ресурсов.
Например, если ваш рабочий каталог src, создайте относительный путь к файлу так:
new File(Paths.get("main","resources").toString());
Есть слабые стороны в этом подходе, поскольку фактический путь к файлу может измениться при развертывании вашего приложения, но он должен помочь вам в простой проработке.
File.createTempFile
для создания копии. Если бы кто-то хотел быть строгим. Добавили код.