Может ли getResourceAsStream () найти файлы вне файла jar? - PullRequest
7 голосов
/ 11 октября 2011

Я разрабатываю приложение, которое использует библиотеку, которая загружает файл конфигурации в виде:

InputStream in = getClass().getResourceAsStream(resource);

Мое приложение затем упаковывается в файл .jar.Если resource находится внутри файла .jar, я могу указать путь как "/relative/path/to/resource/resource".

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

(Предполагаяjar моего приложения находится в app/, а ресурс - в app/config).


В программе используется 3 rd партийная библиотекаБиблиотека использует ресурс в качестве файла конфигурации.

Я также хочу настроить файл конфигурации без необходимости постоянно разархивировать / сжать файл jar.

Ответы [ 3 ]

8 голосов
/ 11 октября 2011

В общем да, может.Технически, класс ClassLoader используется для поиска ресурса, указанного в параметре ( см. Javadoc здесь ).Если вы не используете специальный ClassLoader, вы получите загрузчик класса начальной загрузки, который ищет путь к классу.Поэтому, если у вас есть каталоги или другие файлы jar в пути к классам, они будут найдены.

1 голос
/ 11 октября 2011

Он получит любой ресурс, который доступен соответствующему загрузчику классов (тот, который вернет getClass().getClassLoader()).Включение в загрузчик классов каталога app и jar-файлов зависит от остального контекста вашего приложения.

0 голосов
/ 11 октября 2011

Есть способ получить текущий каталог ( Как получить путь к запущенному файлу JAR? ), но для конфигурации вы можете просто передать -Dconfig.location в JVM, указав абсолютный путь для конфигурации

...