Java properties存储与读取遍历

一、向Properties中添加属性

public Object setProperty(String key,
                          String value)
调用 Hashtable 的方法 put。使用getProperty 方法提供并行性。强制要求为属性的键和值使用字符串。返回值是Hashtable 调用put 的结果。

参数:
key - 要置于属性列表中的键。
value - 对应于 key 的值。
返回:
属性列表中指定键的旧值,如果没有值,则为 null
示例:

public static void generateProperties(Properties properties){
		properties.setProperty("company", "companyName");
		properties.setProperty("department", "departmentName");
		properties.setProperty("position", "positonName");
		properties.setProperty("name", "Name");
	}

二、从Properties中读取属性

public String getProperty(String key)
用指定的键在此属性列表中搜索属性。如果在此属性列表中未找到该键,则接着递归检查默认属性列表及其默认值。如果未找到属性,则此方法返回null

参数:
key - 属性键。
返回:
属性列表中具有指定键值的值。
public String getProperty(String key,
                          String defaultValue)
用指定的键在属性列表中搜索属性。如果在属性列表中未找到该键,则接着递归检查默认属性列表及其默认值。如果未找到属性,则此方法返回默认值变量。

参数:
key - 哈希表键。
defaultValue - 默认值。
返回:
属性列表中具有指定键值的值。

三、从文件中载入Properties

public void load(Reader reader)
          throws IOException
按简单的面向行的格式从输入字符流中读取属性列表(键和元素对)。

此方法返回后,指定的流仍保持打开状态。

参数:
reader - 输入字符流。
public void load(InputStream inStream)
          throws IOException
从输入流中读取属性列表(键和元素对)。输入流按 load(Reader) 中所指定的、简单的面向行的格式。

此方法返回后,指定的流仍保持打开状态。

参数:
inStream - 输入流。 

示例(从文件中载入Properties+从Properties中读取属性):

public static void loadPropertiesFromFile(File propertiesFile, Properties properties){
		InputStream in = null;
		try{
			in = new FileInputStream(propertiesFile);
			properties.load(in);
			
			//第一种方法遍历Properties: 
			//use Enumeration to visit the properties
			System.out.println("propertyNames()");
			Enumeration<?> enumeration = properties.propertyNames();
			while(enumeration.hasMoreElements()){
				String value = (String) enumeration.nextElement();
				System.out.println(value + "=" + properties.getProperty(value)); 
			}
			
			System.out.println();
			
			//第二种方法遍历Properties: 
			//use KeySet to visit the properties
			System.out.println("KeySet()");
			Set<Object> keyset = properties.keySet();
			Iterator<Object> itr = keyset.iterator();
			while(itr.hasNext()){
				String key = (String) itr.next();
				System.out.println(key + "=" + properties.getProperty(key));
			}
			
			System.out.println();
			
			//第三种方法遍历Properties: 
			//use stringPropertyNames()  to visit the properties
			System.out.println("stringPropertyNames() ");
			Set<String> keysetNew = properties.stringPropertyNames();
			Iterator<String> itrNew = keysetNew.iterator();
			while(itrNew.hasNext()){
				String key = itrNew.next();
				System.out.println(key + "=" + properties.getProperty(key));
			}
		}catch(Exception e){
			e.printStackTrace();
		}
	}

四、存储Properties到文件

public void store(Writer writer,
                  String comments)
           throws IOException
将此 Properties 表中的属性列表(键和元素对)写入输出字符。

comments 为自定义的properties文件注释;接下来再默认写入一个注释行,该行包括一个 ASCII# 字符、当前的日期和时间。然后将此Properties 表中的所有项写入 out,一次一行。写入各个项后,刷新输出流。此方法返回后,输出流仍保持打开状态。

参数:
writer - 输出字符流 writer。
comments - 属性列表的描述。
public void store(OutputStream out,
                  String comments)
           throws IOException
将此 Properties 表中的属性列表(键和元素对)写入输出流。

此方法以 store(Writer) 中指定的相同格式输出注释、属性键和值。

参数:
out - 输出流。
comments - 属性列表的描述。 

示例:

public static void saveProperties2file(File propertiesFile, Properties properties){
		OutputStream os = null;
		try {
			os = new FileOutputStream(propertiesFile);
			properties.store(os, "properties write test");
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

补充:

这里properties保存为properties.property键值对文件格式,当然properties也可以保存为xml文件格式(API为storeToXML,对应的读取API为loadFromXML详见jdk文档)。

五、完整测试程序

public class PropertiesTest {
	public static void main(String[] args) {
		//generate a new properties content
		Properties properties = new Properties();
		generateProperties(properties);
		
		//create properties file
		File propertiesFile = createPropertiesFile();
		
		//save properties to file
		saveProperties2file(propertiesFile, properties);
		
		//load/read properties from file
		loadPropertiesFromFile(propertiesFile, properties);
	}
	
	//save properties to file
	public static void saveProperties2file(File propertiesFile, Properties properties){
		OutputStream os = null;
		try {
			os = new FileOutputStream(propertiesFile);
			properties.store(os, "properties write test");
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	//load/read properties from file
	public static void loadPropertiesFromFile(File propertiesFile, Properties properties){
		InputStream in = null;
		try{
			in = new FileInputStream(propertiesFile);
			properties.load(in);
			
			//第一种方法遍历Properties: 
			//use Enumeration to visit the properties
			System.out.println("propertyNames()");
			Enumeration<?> enumeration = properties.propertyNames();
			while(enumeration.hasMoreElements()){
				String value = (String) enumeration.nextElement();
				System.out.println(value + "=" + properties.getProperty(value)); 
			}
			
			System.out.println();
			
			//第二种方法遍历Properties: 
			//use KeySet to visit the properties
			System.out.println("KeySet()");
			Set<Object> keyset = properties.keySet();
			Iterator<Object> itr = keyset.iterator();
			while(itr.hasNext()){
				String key = (String) itr.next();
				System.out.println(key + "=" + properties.getProperty(key));
			}
			
			System.out.println();
			
			//第三种方法遍历Properties: 
			//use stringPropertyNames()  to visit the properties
			System.out.println("stringPropertyNames() ");
			Set<String> keysetNew = properties.stringPropertyNames();
			Iterator<String> itrNew = keysetNew.iterator();
			while(itrNew.hasNext()){
				String key = itrNew.next();
				System.out.println(key + "=" + properties.getProperty(key));
			}
		}catch(Exception e){
			e.printStackTrace();
		}
	}
	
	//create properties file
	public static File createPropertiesFile(){
		File propertiesDir = null;
		File propertiesFile = null;
		try {
			String userDir = System.getProperty("user.dir");
			propertiesDir = new File(userDir + File.separator + "config" );
			System.out.println(propertiesDir);
			if(!propertiesDir.exists()){
				propertiesDir.mkdirs();
			}
			
			propertiesFile = new File(propertiesDir + File.separator + "properties.property");
			System.out.println(propertiesFile);
			if(!propertiesFile.exists()){
				propertiesFile.createNewFile();
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
		return propertiesFile;
	}
	
	public static void generateProperties(Properties properties){
		properties.setProperty("company", "companyName");
		properties.setProperty("department", "departmentName");
		properties.setProperty("position", "positonName");
		properties.setProperty("name", "Name");
	}
}


六、程序运行结束后会产生一个properties.property文件,其内容如下

#properties write test
#Wed Mar 02 16:01:14 CST 2016
position=positonName
company=companyName
name=Name
department=departmentName

补充:

当保存为xml文件格式时,其内容为

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
<comment>properties write test</comment>
<entry key="position">positonName</entry>
<entry key="company">companyName</entry>
<entry key="department">departmentName</entry>
<entry key="name">Name</entry>
</properties>




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值