Java属性文件– java.util.Properties

Java properties file are used to store key-value pair configuration. java.util.Properties class is used to work with properties file in java.

Java属性文件用于存储键值对配置。 java.util.Properties类用于在Java中使用属性文件。

Java属性文件– java.util.Properties (Java Properties File – java.util.Properties)

properties file in java, java util properties, read java properties file, load, write, config

In java properties file can be a normal property file with key-value pairs or it can be an XML file also.


在java中,属性文件可以是具有键值对的普通属性文件,也可以是XML文件。

In this java properties file example, we will show you how to write a property file in both formats and then read properties from both the configuration files.

在此Java属性文件示例中,我们将向您展示如何以两种格式写入属性文件,然后从两个配置文件中读取属性。

We will also show you how to load a properties file from the classpath and how to read all the keys from the properties file.

我们还将向您展示如何从类路径加载属性文件以及如何从属性文件读取所有键。

Java属性文件示例 (Java Properties File Example)

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<Object> 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");
	}

}

When we run above java properties file example program, writePropertyFile method will write property files in both the format and it will be stored in the project root directory.

当我们在上述Java属性文件示例程序上运行时, writePropertyFile方法将以两种格式写入属性文件,并将其存储在项目根目录中。

Here are the property files created from writePropertyFile method.

这是从writePropertyFile方法创建的属性文件。

DB.properties

DB.properties

#DB Config file
#Fri Nov 16 11:16:37 PST 2012
db.user=user
db.host=localhost
db.pwd=password

DB.xml

DB.xml

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE properties SYSTEM "https://java.sun.com/dtd/properties.dtd">
<properties>
<comment>DB Config XML file</comment>
<entry key="db.user">user</entry>
<entry key="db.host">localhost</entry>
<entry key="db.pwd">password</entry>
</properties>

Notice the comments in the property file, it gets generated because we passed the comment also while writing the files. If we pass comment as null, there will be no comments in the property files.

注意属性文件中的注释,它是生成的,因为我们在编写文件时也通过了注释。 如果我们将注释传递为null,则属性文件中将没有注释。

Here is the output of the above java properties file program:

这是上述java属性文件程序的输出:

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)

So when we just give the file name, it looks for the file in project root directory, the same place where it stores the property files. But when we try to load a property file from the classpath, it throws NullPointerException because it tries to load the file from Classpath that is src directory of the project.

因此,当我们仅提供文件名时,它将在项目根目录中查找该文件,该目录与存储属性文件的位置相同。 但是,当我们尝试从类路径加载属性文件时,它会抛出NullPointerException,因为它试图从类路径(即项目的src目录)加载文件。

So if we copy the properties file in the classes src directory, it’s able to load them and works fine.
In that case output of the readPropertyFileFromClasspath method is:

因此,如果我们将属性文件复制到classes src目录中,则可以加载它们并正常工作。
在这种情况下, readPropertyFileFromClasspath方法的输出为:

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

Also, notice that when we use the same Properties object to load another property file, we should clear its contents using clear() method. If we pass any key for which there is no value stored in the properties object, it returns null.

另外,请注意,当我们使用相同的Properties对象加载另一个属性文件时,应使用clear()方法清除其内容。 如果我们传递任何没有在属性对象中存储任何值的键,则它返回null。

That’s all for properties file in java.

这就是java中的属性文件。

翻译自: https://www.journaldev.com/712/java-properties-file-java-util-properties

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值