Создание экземпляра файла java.io.File для чтения ресурса из classpath.

1

Предположим, что у меня есть структура проекта следующим образом:

+ src
---+ main
------+ java
------+ resources

Как я могу определить экземпляр java.io.File который может читать xml из папки ресурсов?

Теги:

2 ответа

1

Нет, используйте 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();
  • 0
    Я не могу использовать InputStream, потому что я должен вызвать внешний конструктор, имеющий в качестве аргумента java.io.File
  • 1
    Поскольку вы, похоже, используете maven, вы можете либо создать файл как второй продукт сборки, либо в коде использовать File.createTempFile для создания копии. Если бы кто-то хотел быть строгим. Добавили код.
Показать ещё 2 комментария
1

Это зависит от того, что работает ваш рабочий каталог.

Вы можете получить свой рабочий каталог во время выполнения через System.getProperty("user.dir");

Здесь ссылка с дополнительной информацией

После этого создайте относительный путь к файлу, указывающий на вашу папку ресурсов.

Например, если ваш рабочий каталог src, создайте относительный путь к файлу так:

new File(Paths.get("main","resources").toString());

Есть слабые стороны в этом подходе, поскольку фактический путь к файлу может измениться при развертывании вашего приложения, но он должен помочь вам в простой проработке.

  • 0
    Установив Paths.get ("src", "main", "resources"). ToString () + "myfile.xml", он работает только как локальное приложение (происходит сбой на сервере, поскольку путь связан с моей средой разработки) ,
  • 0
    Можете ли вы решить эту проблему, обеспечив одинаковую структуру каталогов на вашем сервере и в вашей среде разработки?
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню