Как получить доступ к внешнему файлу из java jar - PullRequest
0 голосов
/ 13 декабря 2018

У меня есть jar, который читает файл, используя следующий код:

Thread.currentThread().getContextClassLoader().getResource(fileName);

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

Ответы [ 2 ]

0 голосов
/ 13 декабря 2018

Чтобы открыть файл как ресурс, добавьте папку, содержащую файлы, которые вы хотите использовать, в ваш classpath:

java -classpath .;config -jar myjar.jar

В этом примере добавляется текущий каталог и каталог config в вашCLASSPATH.

Несколько папок можно указать с помощью разделителя.На окнах используйте ';', в Unix используйте ':'.

Чтобы открыть файл как файл, вы можете просто использовать

new File("configfile")

, который будет выглядеть в рабочем каталоге (каталог, в котором вы запустили Java)

0 голосов
/ 13 декабря 2018

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

Не в том же каталоге

Первый подход заключается в том, где вам нужно будет разместить этот файл.файл вне JAR и не обязательно рядом с файлом JAR в том же каталоге.В этом случае вы можете передать местоположение файла config * , используя либо переменную окружения (например, если вы запускаете JAR в оболочке), либо свойство Java.

Чтобы использовать переменную окружения, предполагая, что вы используете какой-то дистрибутив Linux, вы можете использовать команду export для установки значения;что-то вроде этого:

$ export CONFIG_FILE_LOC=/etc/myapp/config.file

Затем вы можете прочитать значение в своем коде, используя класс System, используя следующий код:

String fileLocationEnv = System.getenv("CONFIG_FILE_LOC");

В качестве альтернативы, вы можете установить это каксвойство, добавив следующий сегмент в команду запуска:

$ java -Dconfig.file.location=/etc/myapp/config.file -jar myapp.jar

Затем вы можете прочитать значение в своем коде, используя класс System для свойств, используя следующий код:

String fileLocationProp = System.getProperty("config.file.location");

В том же каталоге

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

try{
    new File(MyApp.class.getProtectionDomain().getCodeSource().getLocation().toURI());
 } catch(URISyntaxException exception){
    System.out.println("Exception");
 }

Надеюсь, что это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...