Как использовать файлы свойств Java?
У меня есть список пар ключ/значение значений конфигурации, которые я хочу сохранить как файлы свойств Java, а затем загрузить и выполнить итерацию.
вопросы:
- нужно ли хранить файл в том же пакете, что и класс, который их загрузит, или есть какое-либо конкретное место, где он должен быть размещен?
- должен ли файл заканчиваться каким-либо конкретным расширением или
.txt
ОК? - как я могу загрузить файл в код
- и как я могу перебирать значения внутри?
14 ответов
Вы можете передать InputStream в свойство, поэтому ваш файл может быть практически в любом месте и называться чем угодно.
Properties properties = new Properties();
try {
properties.load(new FileInputStream("path/filename"));
} catch (IOException e) {
...
}
итерации как:
for(String key : properties.stringPropertyNames()) {
String value = properties.getProperty(key);
System.out.println(key + " => " + value);
}
вы можете сохраните файл в любом месте вам нравится. Если вы хотите сохранить его в своем файле jar, вы захотите использовать
Class.getResourceAsStream()
илиClassLoader.getResourceAsStream()
для доступа к нему. Если это в файловой системе, это немного проще.любое расширение в порядке, хотя .свойства более распространены в моем опыте
Загрузить файл с помощью
Properties.load
, проходящей вInputStream
илиStreamReader
если вы используете Java 6. (Если ты are используя Java 6, я бы, вероятно, использовал UTF-8 иReader
вместо кодировки ISO-8859-1 по умолчанию для потока.)итерации через него, как вы бы итерации через нормальный
Hashtable
(гдеProperties
происходит от), например, с помощьюkeySet()
. Кроме того, можно использовать перечисление, возвращаемоеpropertyNames()
.
Если вы поместите файл свойств в тот же пакет, что и класс Foo, вы можете легко загрузить его с помощью
new Properties().load(Foo.class.getResourceAsStream("file.properties"))
учитывая, что свойства расширяют хэш-таблицу, вы можете перебирать значения так же, как и в хэш-таблице.
Если вы используете *.расширение свойств вы можете получить поддержку редактора, например, Eclipse имеет редактор файлов свойств.
существует множество способов создания и чтения properties
файлы:
- сохраните файл в том же пакете.
- рекомендую
.properties
расширение, однако вы можете выбрать свой собственный. - используйте классы тезисов, расположенные по адресу
java.util
упаковка =>Properties
,ListResourceBundle
,ResourceBundle
классы. - для чтения свойств используйте итератор или перечислитель или прямые методы
Properties
илиjava.lang.System
класса.
ResourceBundle
класс:
ResourceBundle rb = ResourceBundle.getBundle("prop"); // prop.properties
System.out.println(rb.getString("key"));
Properties
класс:
Properties ps = new Properties();
ps.Load(new java.io.FileInputStream("my.properties"));
загрузить файл свойств:
Properties prop = new Properties();
InputStream stream = ...; //the stream to the file
try {
prop.load(stream);
} finally {
stream.close();
}
Я использую, чтобы поставить .файл свойств в каталоге, где у меня есть все файлы конфигурации, я не помещаю его вместе с классом, который обращается к нему, но здесь нет никаких ограничений.
имя... Я использую .свойства для многословия, я не думаю, что вы должны назвать его .недвижимость, если не хотите.
пример:
Properties pro = new Properties();
FileInputStream in = new FileInputStream("D:/prop/prop.properties");
pro.load(in);
String temp1[];
String temp2[];
// getting values from property file
String username = pro.getProperty("usernamev3");//key value in prop file
String password = pro.getProperty("passwordv3");//eg. username="zub"
String delimiter = ","; //password="abc"
temp1=username.split(delimiter);
temp2=password.split(delimiter);
по порядку:
- вы можете сохранить файл где угодно.
- расширение не надо.
- Монтекристо имеет иллюстрированная как загрузить этот. Это должно сработать.
- propertyNames() дает вам перечисление для итерации.
по умолчанию Java открывает его в рабочем каталоге вашего приложения (это поведение фактически зависит от используемой ОС). Чтобы загрузить файл, выполните:
Properties props = new java.util.Properties();
FileInputStream fis new FileInputStream("myfile.txt");
props.load(fis)
таким образом, любое расширение файла может использоваться для файла свойств. Кроме того, файл также может храниться в любом месте, если вы можете использовать FileInputStream
.
в соответствующем примечании если вы используете современный фреймворк, фреймворк может предоставить дополнительные способы открытия файла свойств. Например, Spring provide a ClassPathResource
загрузка файла свойств с помощью имени пакета из файла JAR.
Что касается итерации свойств, то после загрузки свойств они сохраняются в java.util.Properties
объект, который предлагает propertyNames()
метод.
Properties стала наследием. настройки класс предпочтительнее свойств.
узел в иерархической коллекции данных предпочтений. Этот класс позволяет приложениям хранить и извлекать пользовательские и системные предпочтения и данные конфигурации. Эти данные постоянно хранятся в резервном хранилище, зависящем от реализации. Типичные реализации включают плоские файлы, реестры ОС, серверы каталогов и базы данных SQL. Пользователь этого класса не нужно беспокоиться о деталях резервного магазина.
В отличие от свойств, которые являются строковыми парами ключ-значение,Preferences
класс имеет несколько методов, используемых для получения и размещения примитивных данных в хранилище данных настроек. Мы можем использовать только следующие типы данных:
- строка
- boolean
- двойной
- float
- int
- долго
- байт массив
чтобы загрузить файл свойств, вы можете указать абсолютный путь или использовать getResourceAsStream()
Если файл свойств присутствует в вашем classpath.
package com.mypack.test;
import java.io.*;
import java.util.*;
import java.util.prefs.Preferences;
public class PreferencesExample {
public static void main(String args[]) throws FileNotFoundException {
Preferences ps = Preferences.userNodeForPackage(PreferencesExample.class);
// Load file object
File fileObj = new File("d:\data.xml");
try {
FileInputStream fis = new FileInputStream(fileObj);
ps.importPreferences(fis);
System.out.println("Prefereces:"+ps);
System.out.println("Get property1:"+ps.getInt("property1",10));
} catch (Exception err) {
err.printStackTrace();
}
}
}
xml-файл:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE preferences SYSTEM 'http://java.sun.com/dtd/preferences.dtd'>
<preferences EXTERNAL_XML_VERSION="1.0">
<root type="user">
<map />
<node name="com">
<map />
<node name="mypack">
<map />
<node name="test">
<map>
<entry key="property1" value="80" />
<entry key="property2" value="Red" />
</map>
</node>
</node>
</node>
</root>
</preferences>
посмотри статьи на внутренних предпочтений магазина
чтение файла свойств и загрузка его содержимого в Properties
String filename = "sample.properties";
Properties properties = new Properties();
input = this.getClass().getClassLoader().getResourceAsStream(filename);
properties.load(input);
ниже приведен эффективный способ итерации по Properties
for (Entry<Object, Object> entry : properties.entrySet()) {
System.out.println(entry.getKey() + " => " + entry.getValue());
}
1) Хорошо иметь свой файл в classpath, но вы можете разместить его в любом месте в проекте.
ниже показано, как загрузить файл свойств из classpath и прочитать все свойства.
Properties prop = new Properties();
InputStream input = null;
try {
String filename = "path to property file";
input = getClass().getClassLoader().getResourceAsStream(filename);
if (input == null) {
System.out.println("Sorry, unable to find " + filename);
return;
}
prop.load(input);
Enumeration<?> e = prop.propertyNames();
while (e.hasMoreElements()) {
String key = (String) e.nextElement();
String value = prop.getProperty(key);
System.out.println("Key : " + key + ", Value : " + value);
}
} catch (IOException ex) {
ex.printStackTrace();
} finally {
if (input != null) {
try {
input.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
2) файлы свойств имеют расширение as .свойства
на Java 8 чтобы получить все свои свойства
public static Map<String, String> readPropertiesFile(String location) throws Exception {
Map<String, String> properties = new HashMap<>();
Properties props = new Properties();
props.load(new FileInputStream(new File(location)));
props.forEach((key, value) -> {
properties.put(key.toString(), value.toString());
});
return properties;
}
вот еще один способ перебора свойств:
Enumeration eProps = properties.propertyNames();
while (eProps.hasMoreElements()) {
String key = (String) eProps.nextElement();
String value = properties.getProperty(key);
System.out.println(key + " => " + value);
}
Я написал об этой структуре свойств за последний год. Он предоставит несколько способов загрузки свойств, и они также будут строго типизированы.
взгляните на http://sourceforge.net/projects/jhpropertiestyp/
JHPropertiesTyped даст разработчику строго типизированные свойства. Легко интегрируется в существующие проекты. Обрабатывается большой серией для типов свойств. Дает возможность однострочной инициализации свойств через свойство IO реализации. Дает разработчику возможность создавать собственные типы свойств и свойства ввода-вывода. Веб-демо также доступна, скриншоты, показанные выше. Также есть стандартная реализация для веб-интерфейса для управления свойствами, если вы решите его использовать.
полная документация, учебник, javadoc, faq и т. д. доступна на веб-странице проекта.