Рубрики
Без рубрики

Файл свойств Java – java.util.Свойства

Файл свойств на java. Файл свойств Java читается, загружается, записывается. java.util.Класс свойств getProperty, метод очистки, xml свойств java, файл конфигурации java

Автор оригинала: 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 keys= prop.keySet();
		for(Object obj : keys){
			System.out.println(propertyFileName + ":: Key="+obj.toString()+"::value="+prop.getProperty(obj.toString()));
		}
		//loading xml file now, first clear existing properties
		prop.clear();
		InputStream is = new FileInputStream(xmlFileName);
		prop.loadFromXML(is);
		keys= prop.keySet();
		for(Object obj : keys){
			System.out.println(xmlFileName + ":: Key="+obj.toString()+"::value="+prop.getProperty(obj.toString()));
		}
		//Now free all the resources
		is.close();
		reader.close();
		System.out.println("End of readAllKeys");
	}

	/**
	 * This method reads property files from file system
	 * @param propertyFileName
	 * @param xmlFileName
	 * @throws IOException 
	 * @throws FileNotFoundException 
	 */
	private static void readPropertyFile(String propertyFileName, String xmlFileName) throws FileNotFoundException, IOException {
		System.out.println("Start of readPropertyFile");
		Properties prop = new Properties();
		FileReader reader = new FileReader(propertyFileName);
		prop.load(reader);
		System.out.println(propertyFileName +"::db.host = "+prop.getProperty("db.host"));
		System.out.println(propertyFileName +"::db.user = "+prop.getProperty("db.user"));
		System.out.println(propertyFileName +"::db.pwd = "+prop.getProperty("db.pwd"));
		System.out.println(propertyFileName +"::XYZ = "+prop.getProperty("XYZ"));
		//loading xml file now, first clear existing properties
		prop.clear();
		InputStream is = new FileInputStream(xmlFileName);
		prop.loadFromXML(is);
		System.out.println(xmlFileName +"::db.host = "+prop.getProperty("db.host"));
		System.out.println(xmlFileName +"::db.user = "+prop.getProperty("db.user"));
		System.out.println(xmlFileName +"::db.pwd = "+prop.getProperty("db.pwd"));
		System.out.println(xmlFileName +"::XYZ = "+prop.getProperty("XYZ"));
		//Now free all the resources
		is.close();
		reader.close();
		System.out.println("End of readPropertyFile");
	}
	
	/**
	 * This method writes Property files into file system in property file
	 * and xml format
	 * @param fileName
	 * @throws IOException
	 */
	private static void writePropertyFile(String propertyFileName, String xmlFileName) throws IOException {
		System.out.println("Start of writePropertyFile");
		Properties prop = new Properties();
		prop.setProperty("db.host", "localhost");
		prop.setProperty("db.user", "user");
		prop.setProperty("db.pwd", "password");
		prop.store(new FileWriter(propertyFileName), "DB Config file");
		System.out.println(propertyFileName + " written successfully");
		prop.storeToXML(new FileOutputStream(xmlFileName), "DB Config XML file");
		System.out.println(xmlFileName + " written successfully");
		System.out.println("End of writePropertyFile");
	}

}

Когда мы запускаем приведенную выше программу примера файла свойств 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.