Автор оригинала: Pankaj Kumar.
Файл свойств Java используется для хранения конфигурации пары ключ-значение. java.util.Класс Properties
используется для работы с файлом свойств в java.
Файл свойств Java – java.util.Свойства
В java файл свойств может быть обычным файлом свойств с парами ключ-значение или также может быть XML-файлом.
В этом примере файла свойств java мы покажем вам, как записать файл свойств в обоих форматах, а затем прочитать свойства из обоих файлов конфигурации.
Мы также покажем вам, как загрузить файл свойств из пути к классам и как прочитать все ключи из файла свойств.
Пример файла свойств Java
package com.journaldev.util; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; import java.util.Properties; import java.util.Set; public class PropertyFilesUtil { public static void main(String[] args) throws IOException { String propertyFileName = "DB.properties"; String xmlFileName = "DB.xml"; writePropertyFile(propertyFileName, xmlFileName); readPropertyFile(propertyFileName, xmlFileName); readAllKeys(propertyFileName, xmlFileName); readPropertyFileFromClasspath(propertyFileName); } /** * read property file from classpath * @param propertyFileName * @throws IOException */ private static void readPropertyFileFromClasspath(String propertyFileName) throws IOException { Properties prop = new Properties(); prop.load(PropertyFilesUtil.class.getClassLoader().getResourceAsStream(propertyFileName)); System.out.println(propertyFileName +" loaded from Classpath::db.host = "+prop.getProperty("db.host")); System.out.println(propertyFileName +" loaded from Classpath::db.user = "+prop.getProperty("db.user")); System.out.println(propertyFileName +" loaded from Classpath::db.pwd = "+prop.getProperty("db.pwd")); System.out.println(propertyFileName +" loaded from Classpath::XYZ = "+prop.getProperty("XYZ")); } /** * read all the keys from the given property files * @param propertyFileName * @param xmlFileName * @throws IOException */ private static void readAllKeys(String propertyFileName, String xmlFileName) throws IOException { System.out.println("Start of readAllKeys"); Properties prop = new Properties(); FileReader reader = new FileReader(propertyFileName); prop.load(reader); Set
Когда мы запускаем приведенную выше программу примера файла свойств java, writePropertyFile
метод запишет файлы свойств в обоих форматах, и они будут сохранены в корневом каталоге проекта.
Вот файлы свойств, созданные с помощью метода writePropertyFile
.
Вот файлы свойств, созданные с помощью метода || writePropertyFile||.
#DB Config file #Fri Nov 16 11:16:37 PST 2012 db.user=user db.host=localhost db.pwd=password
Вот файлы свойств, созданные с помощью метода || writePropertyFile||.
DB Config XML file user localhost password
Обратите внимание на комментарии в файле свойств, он генерируется, потому что мы передали комментарий также во время записи файлов. Если мы передадим комментарий как нулевой, в файлах свойств комментариев не будет.
Вот выходные данные вышеупомянутой программы java properties file:
Start of writePropertyFile DB.properties written successfully DB.xml written successfully End of writePropertyFile Start of readPropertyFile DB.properties::db.host = localhost DB.properties::db.user = user DB.properties::db.pwd = password DB.properties::XYZ = null DB.xml::db.host = localhost DB.xml::db.user = user DB.xml::db.pwd = password DB.xml::XYZ = null End of readPropertyFile Start of readAllKeys DB.properties:: Key=db.user::value=user DB.properties:: Key=db.host::value=localhost DB.properties:: Key=db.pwd::value=password DB.xml:: Key=db.user::value=user DB.xml:: Key=db.host::value=localhost DB.xml:: Key=db.pwd::value=password End of readAllKeys Exception in thread "main" java.lang.NullPointerException at java.util.Properties$LineReader.readLine(Properties.java:434) at java.util.Properties.load0(Properties.java:353) at java.util.Properties.load(Properties.java:341) at com.journaldev.util.PropertyFilesUtil.readPropertyFileFromClasspath(PropertyFilesUtil.java:31) at com.journaldev.util.PropertyFilesUtil.main(PropertyFilesUtil.java:21)
Поэтому, когда мы просто указываем имя файла, он ищет файл в корневом каталоге проекта, в том же месте, где хранятся файлы свойств. Но когда мы пытаемся загрузить файл свойств из пути к классу, он выдает Исключение NullPointerException , потому что он пытается загрузить файл из пути к классу, который является каталогом src
проекта.
Поэтому, если мы скопируем файл свойств в каталог classes src, он сможет их загрузить и будет работать нормально. В этом случае вывод файла свойств read из пути к классу
является:
DB.properties loaded from Classpath::db.host = localhost DB.properties loaded from Classpath::db.user = user DB.properties loaded from Classpath::db.pwd = password DB.properties loaded from Classpath::XYZ = null
Кроме того, обратите внимание, что когда мы используем тот же объект свойств для загрузки другого файла свойств, мы должны очистить его содержимое с помощью метода clear ()
. Если мы передадим любой ключ, для которого в объекте свойств нет значения, он вернет значение null.
Это все для файла свойств в java.