Как использовать файлы свойств Java?

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

Вопросов:

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

Вы можете передать 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 чаще встречается в моем опыте

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

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

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

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

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

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

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

  1. Храните файл в том же пакете.
  2. Рекомендуем расширение .properties однако вы можете выбрать свой собственный.
  3. Используйте classы тезисов, расположенные в classах java.util package => Properties , ListResourceBundle , ResourceBundle .
  4. Чтобы прочитать свойства, используйте iterator или перечислитель или прямые методы Properties или class 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 в каталог, где у меня есть все файлы конфигурации, я не помещаю его вместе с classом, который обращается к нему, но здесь нет ограничений.

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

Пример:

 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); 

В порядке:

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

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

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

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

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

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

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

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

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

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

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

 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:

                    

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

Чтение файла свойств и загрузка его содержимого в Properties

 String filename = "sample.properties"; Properties properties = new Properties(); input = this.getClass().getClassLoader().getResourceAsStream(filename); properties.load(input); 

Ниже приведен эффективный способ итерации по Properties

  for (Entry entry : properties.entrySet()) { System.out.println(entry.getKey() + " => " + entry.getValue()); } 

1) Хорошо иметь свой файл свойств в classpath, но вы можете поместить его в любом месте проекта.

Ниже описано, как вы загружаете файл свойств из пути к classам и читаете все свойства.

 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) Файлы свойств имеют расширение как .properties

В Java 8 для получения всех ваших свойств

 public static Map readPropertiesFile(String location) throws Exception { Map 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 свойств. Предоставляет разработчику возможность создавать собственные типы собственности и свойства io. Также доступна демонстрация веб-сайтов, скриншоты, показанные выше. Кроме того, у вас есть стандартная реализация для веб-интерфейса для управления свойствами, если вы решите использовать его.

Полная документация, учебник, javadoc, faq и т. Д. Доступны на веб-странице проекта.

  • Swift readonly external, внутреннее свойство readwrite
  • Свойства и переменные экземпляра в Objective-C
  • Свойство DependencyProperty для представления twoway-bind для свойства viewmodel?
  • Как получить значение свойства bean, когда само имя свойства является динамической переменной
  • Инициализация свойства, точечная нотация
  • Обратный вызов, когда свойство зависимостей получает изменение xaml
  • Обновление значения свойства в файле свойств без удаления других значений
  • Свойства Java Backslash
  • Загрузить файл свойств в JAR?
  • Как избежать знака равенства в файлах свойств
  • Создает ли private @property переменную экземпляра @private?
  • Давайте будем гением компьютера.