2015-11-19 1 views
0

Я ищу способ «наилучшей практики» для доступа к файлам ресурсов (например, пакет .xml-файлов), а также структуру папок, в которой они находятся, независимо от того, используемого сервера приложений.Java: универсальный доступ к файлам ресурсов независимо от сервера приложений

Прямо сейчас я использую Wildfly 8 сервер и получить доступ ко всем src/main/resources/xxxx, получая приложения реальный путь затем с помощью Paths.get(resourcePath), а также Files.walk(Paths.get(folderPath)), если я хочу, чтобы получить доступ к файлам в папку в.

Однако, я столкнулся с проблемой, когда я попытался развернуть в Weblogic 12с, потому что это сервер приложений фактически берет все под WEB-INF/classes и создает .jar файл и добавляет его в WEB-INF/lib. Я все еще могу получить доступ к уникальным ресурсам, используя classLoader.getResource(resourcePath), но по какой-то причине, когда я пытаюсь создать new File(Paths.get(resourcePath) или использовать Files.walk(Paths.get(folderPath)), он, похоже, не работает. Он выдает исключение, говорящее, что файл не существует, что я предполагаю, потому что он недоступен, поскольку он упакован внутри файла jar.

Я мог бы использовать classLoader.getResource(resourcePath) для доступа ко всем моим ресурсам, но, к сожалению, в моем случае я не могу знать, какие ресурсы будут доступны во время компиляции. Мне особенно нужно иметь доступ к файлам и подпапкам выбранной папки, но я не нашел общий способ сделать это на обоих серверах приложений или на всех серверах приложений.

Бонусные баллы, если решение использует новый файл api вместо создания группы FileReaders, но я тоже в порядке.

ответ

1

Вы можете поместить файлы XML в папку /WEB-INF/xml, а затем использовать ServletContext для получения File или Path для этого местоположения.

Вариант 1:

вызов servletContext.getResourceUrl("/WEB-INF/xml") получить URL и превратить этот URL в File или Path. Но в зависимости от сервера это может вернуть URL-адрес нефайлового ресурса, например. a jndi:/ url.

Вариант 2:

вызов servletContext.getRealPath("/WEB-INF/xml") для получения файла строку и преобразовать этот URL в File или Path.

+0

Это было бы решением да, но я неохотно согласен с тем, что нет способа получить доступ к дереву папок ресурсов из папки ресурсов, где они на самом деле должны быть. – Konstantine

Смежные вопросы