Как использовать файлы свойств Java? - PullRequest
214 голосов
/ 23 августа 2009

У меня есть список пар ключ / значение значений конфигурации, которые я хочу сохранить как файлы свойств Java, а затем загрузить и выполнить итерацию.

Вопросы:

  • Нужно ли хранить файл в том же пакете, что и класс, который их загрузит, или есть какое-то конкретное место, где он должен быть расположен?
  • Должен ли файл заканчиваться каким-либо конкретным расширением или .txt ОК?
  • Как загрузить файл в коде
  • А как я могу перебрать значения внутри?

Ответы [ 15 ]

241 голосов
/ 23 августа 2009

Вы можете передать InputStream в Property, чтобы ваш файл мог находиться где угодно и вызываться как угодно.

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);
}
78 голосов
/ 23 августа 2009
  • Вы можете хранить файл где угодно. Если вы хотите сохранить его в своем jar-файле, вы можете использовать Class.getResourceAsStream() или ClassLoader.getResourceAsStream() для доступа к нему. Если это в файловой системе, то это немного проще.

  • С любым расширением все в порядке, хотя в моем опыте чаще встречается .properties

  • Загрузите файл, используя Properties.load, передав InputStream или StreamReader, если вы используете Java 6. (Если вы используете Java 6, я бы вероятно, используйте UTF-8 и Reader вместо кодировки по умолчанию ISO-8859-1 для потока.)

  • Выполните итерацию по нему, как и по обычному Hashtable (из которого Properties происходит), например, используя keySet(). Кроме того, вы можете использовать перечисление, возвращаемое propertyNames().

26 голосов
/ 23 августа 2009

Если вы поместите файл свойств в тот же пакет, что и класс Foo, вы можете легко загрузить его с помощью

new Properties().load(Foo.class.getResourceAsStream("file.properties"))

Учитывая, что Properties расширяет Hashtable, вы можете перебирать значения таким же образом, как и в Hashtable.

Если вы используете расширение * .properties, вы можете получить поддержку редактора, например, Eclipse имеет редактор файлов свойств.

11 голосов
/ 23 августа 2009

Существует множество способов создания и чтения properties файлов:

  1. Сохраните файл в том же пакете.
  2. Рекомендовать .properties расширение, однако вы можете выбрать свой собственный.
  3. Используйте эти классы, расположенные в java.util package => Properties, ListResourceBundle, ResourceBundle classes.
  4. Чтобы прочитать свойства, используйте итератор или перечислитель или прямые методы класса 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"));
5 голосов
/ 29 февраля 2012

Пример:

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);
5 голосов
/ 23 августа 2009

Это загрузить файл свойств:

Properties prop = new Properties();
InputStream stream = ...; //the stream to the file
try {
  prop.load(stream);
} finally {
  stream.close();
}

Я использую, чтобы поместить файл .properties в каталог, где у меня есть все файлы конфигурации, я не помещаю его вместе с классом, который обращается к нему, но здесь нет никаких ограничений.

Для имени ... Я использую .properties для многословия, я не думаю, что вы должны назвать его .properties, если вы не хотите.

3 голосов
/ 01 июня 2016

Чтение файла свойств и загрузка его содержимого в 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());
    }
3 голосов
/ 11 ноября 2015

Свойства стали наследством. Предпочтения класс предпочтительнее Свойства.

Узел в иерархической коллекции данных о предпочтениях. Этот класс позволяет приложениям хранить и извлекать пользовательские и системные предпочтения и данные конфигурации. Эти данные постоянно хранятся в зависимом от реализации резервном хранилище. Типичные реализации включают в себя плоские файлы, специфичные для ОС реестры, серверы каталогов и базы данных SQL. Пользователю этого класса не нужно интересоваться подробностями бэк-магазина.

В отличие от свойств, которые представляют собой пары ключ-значение на основе строк, класс Preferences имеет несколько методов, используемых для получения и размещения примитивных данных в хранилище данных Preferences. Мы можем использовать только следующие типы данных:

  1. Строка
  2. логическое
  3. двойной
  4. поплавок
  5. INT
  6. долго
  7. байтовый массив

Чтобы загрузить файл свойств, вы можете указать абсолютный путь или использовать getResourceAsStream(), если файл свойств присутствует в вашем пути к классам.

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>

Взгляните на эту статью на внутреннем магазине предпочтений

3 голосов
/ 23 августа 2009

В заказе:

  1. Вы можете хранить файл практически везде.
  2. расширение не требуется.
  3. У Montecristo показано , как это загрузить. Это должно работать нормально.
  4. propertyNames () дает вам перечисление для итерации.
3 голосов
/ 23 августа 2009

По умолчанию Java открывает его в рабочем каталоге вашего приложения (это поведение зависит от используемой ОС). Чтобы загрузить файл, выполните:

Properties props = new java.util.Properties();
FileInputStream fis new FileInputStream("myfile.txt");
props.load(fis)

Таким образом, для файла свойств может использоваться любое расширение файла. Кроме того, файл также может храниться где угодно, если вы можете использовать FileInputStream.

В связанной заметке, если вы используете современный фреймворк, фреймворк может предоставить дополнительные способы открытия файла свойств. Например, Spring предоставляет ClassPathResource для загрузки файла свойств, используя имя пакета из файла JAR.

Что касается перебора свойств, то после загрузки свойств они сохраняются в объекте java.util.Properties, который предлагает метод propertyNames().

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