Как использовать файлы свойств 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 и AReaderвместо кодировки ISO-8859-1 по умолчанию для потока.)итерации через него, как вы бы итерации через нормальный
Hashtable(гдеPropertiesпроисходит от), например, с помощьюkeySet(). Кроме того, вы можете использовать перечисление возвращаемыхpropertyNames().
Если вы поместите файл свойств в тот же пакет, что и класс Foo, вы можете легко загрузить его с помощью
new Properties().load(Foo.class.getResourceAsStream("file.properties"))учитывая, что свойства расширяют Hashtable, вы можете перебирать значения таким же образом, как и в Hashtable.
Если вы используете *.расширение свойств вы можете получить поддержку редактора, например Eclipse имеет редактор файлов свойств.
есть много способов создания и чтения
propertiesфайлы:
- сохраните файл в том же пакете.
- рекомендую
.propertiesрасширение, однако вы можете выбрать свой собственный.- используйте классы тезисов, расположенные по адресу
java.utilpackage =>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.в соответствующем примечании если вы используете современный фреймворк, фреймворк может предоставлять дополнительные способы открытия файла свойств. Например, весной обеспечивают
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>взгляните на это статьи на внутренних устройствах предпочтений store
чтение файла свойств и загрузка его содержимого в
PropertiesString filename = "sample.properties"; Properties properties = new Properties(); input = this.getClass().getClassLoader().getResourceAsStream(filename); properties.load(input);ниже приведен эффективный способ итерации над
Propertiesfor (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 .свойства
In 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 даст разработчику строго типизированные свойства. Легко интегрируется в существующие проекты. Обрабатывается большой серией для типов свойств. Дает возможность одной строкой инициализации свойства через свойства ИО реализации. Дает разработчику возможность создавать собственные типы свойств и свойства ввода-вывода. Веб-демонстрация также доступна, скриншоты, показанные выше. Также есть стандартная реализация для веб-интерфейса для управления свойствами, если вы решите его использовать.
полная документация, учебник, javadoc, faq и т. д. доступны на веб-странице проекта.
Comments