2010-01-20 4 views
2

Каков наилучший способ хранения и загрузки свойств уровня приложения в Java.Загрузка свойств приложения в настольном приложении Java

Есть ли что-нибудь simulare в .net, где я бы просто положить что-то в app.config

<appSettings> 
    <add key="emailAddress" value="[email protected]" /> 
    </appSettings> 

А затем получить его так:

string AdminEmail = ConfigurationManager.AppSettings["emailAddress"]; 

ли я загрузить файлы свойств в потоки файлов и т. д.? кажется ненужной работой.

Я попытался это:

Properties props = new Properties(); 

FileInputStream fis = new FileInputStream("myProps.properties"); 
props.load(fis); 
fis.close(); 

Но это дает мне исключение java.io.FileNotFoundException. Где файл свойств должен идти по отношению к классу?

ответ

0

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

Скажите, например, приложение поставляется в файле jar app.jar. Поместите 'myProps.properties' в тот же каталог и запустите 'java -jar app.jar' из этого каталога. Он должен найти ваш файл свойств таким образом.

1

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

String currentFolder = System.getProperty("user.dir"); 
2

Если вы используете FileInputStream так, ваш путь относительно текущего каталога ОС, обычно это каталог запуска.

Если вы используете механизм ресурсов Java, встроенный в ресурсы (как описано in the API, getResourceAsStream() и др.), Путь будет относиться к местоположению вашего класса. При таком подходе вы также можете загружать ресурсы из баннеров и даже по сетям (например, для апплетов). Используемая концепция представляет собой своего рода виртуальную файловую систему, которая называется «classpath» на Java-жаргоне. Существует статья devx, в которой она подробно освещена.

Короче говоря, этот вид коды работает хорошо:

Properties prop = new Properties(); 
//with properties in the same dir as current class 
prop.load(getClass().getResourceAsStream("my.properties")); 
//with properties in the root dir of your jar, or in base of classpath 
prop.load(getClass().getResourceAsStream("/my.properties")); 

Вам нужно будет добавить обработку ошибок ...

0

Вы можете использовать свойство с ResourceBundle. Я использую это в приложении для хранения меток, кнопок и сообщений на разных языках.

Сначала вы создаете файл свойств, например test.properties. Подмигнули текстовый файл и в нем вы кладете информацию, как это:

propertyname=value 

В вашем случае

[email protected] 
[email protected] 

и так далее ...

Чтобы получить это свойство в коде, создайте объект ResourceBundle с именем вашего файла свойства, чтобы вызвать свойства.

ResourceBundle rb = ResourceBundle.getBundle("test"); 

Чтобы получить конкретное значение из файла свойств, просто вызовите ResourceBundle

String value = rb.getString("emailAddress"); 

Таким образом, строка с именем значение содержит значение свойства, названного «EMAILADDRESS», расположенный в тесте .properties файл

String value2 = rb.getString("email2"); 

Аналогично, строка с именем значение2 содержит значение свойства, названного «email2», расположенный в test.properties файл

4

Эта функция обеспечивает Preferences API. У этого есть много бородавок, но если вы хотите сделать это с помощью OS-agnostic, это единственный способ добиться этого, используя стандартные библиотеки времени выполнения Java. Конечно, вы всегда можете написать свой собственный код, специфичный для ОС, в соответствии с вашими потребностями. Да, вы можете написать простой код для загрузки файла свойств, но расположение этого файла может стать проблемой для нескольких операционных систем. Я предполагаю, что, поскольку вы пишете настольное приложение на Java, вы заботитесь о переносимости ОС. В противном случае Java не может быть лучшим выбором для настольного приложения.

0

Если вы не указали абсолютный путь, выбранный является текущим.

Это не совсем то, что вы просили, но если вы хотите использовать XML-файлы в качестве конфигурации, вы можете взглянуть на Apache Commons Configuration

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