Как использовать файлы свойств Java?
У меня есть список пар ключ / значение значений конфигурации, которые я хочу хранить как файлы свойств Java, а затем загружать и выполнять итерацию.
Вопросов:
- Нужно ли хранить файл в том же пакете, что и class, который будет загружать их, или есть какое-то конкретное место, где оно должно быть размещено?
- Должен ли файл заканчиваться на любом конкретном расширении или является
.txt
ОК? - Как загрузить файл в код
- И как я могу перебирать значения внутри?
- Json.NET (Newtonsoft.Json) - Два «свойства» с таким же именем?
- В чем разница между свойством Property и Dependency Property
- Ссылка на объект требуется для нестатического поля, метода или свойства?
- Свойства системы Java и переменные среды
- Как пропустить Получить только свойства в servicestack json serializer?
- Почему нам нужны свойства в C #
- Как скрыть унаследованное свойство в classе без изменения унаследованного classа (базового classа)?
- Аннотирование Spring @Value в classе @Controller, не оценивающая значение внутри файла свойств
- Свойства vs Методы
- Почему у вас есть пустое свойство get set вместо использования переменной public?
- Angular2 - ошибка, если не проверить, существует ли {{object.field}}
- Аутентифицированная среда равна нулю
- Как перебрать все свойства classа?
Вы можете передать 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
:
- Храните файл в том же пакете.
- Рекомендуем расширение
.properties
однако вы можете выбрать свой собственный. - Используйте classы тезисов, расположенные в classах
java.util
package =>Properties
,ListResourceBundle
,ResourceBundle
. - Чтобы прочитать свойства, используйте iterator или перечислитель или прямые методы
Properties
или classjava.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);
В порядке:
- Вы можете хранить файл почти везде.
- расширение не требуется.
- Монтекристо проиллюстрировал, как загрузить это. Это должно работать нормально.
- 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. Мы можем использовать только следующие типы данных:
- строка
- логический
- двойной
- поплавок
- ИНТ
- длинный
- массив байтов
Чтобы загрузить файл свойств, вы можете предоставить абсолютный путь или использовать 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
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 и т. Д. Доступны на веб-странице проекта.