java基础学习之Properties 十二

Properties 类表示了一个持久的属性集。Properties 可保存在流中或从流中加载。属性列表中每个键及其对应值都是一个字符串。

一个属性列表可包含另一个属性列表作为它的“默认值”;如果未能在原有的属性列表中搜索到属性键,则搜索第二个属性列表。

因为 Properties 继承于 Hashtable,所以可对 Properties 对象应用 put 和 putAll 方法。但不建议使用这两个方法,因为它们允许调用者插入其键或值不是 String 的项。相反,应该使用 setProperty 方法。如果在“不安全”的 Properties 对象(即包含非 String 的键或值)上调用 store 或 save 方法,则该调用将失败。类似地,如果在“不安全”的 Properties 对象(即包含非 String 的键)上调用 propertyNames 或 list 方法,则该调用将失败。

load(Reader) / store(Writer, String) 方法按下面所指定的、简单的面向行的格式在基于字符的流中加载和存储属性。除了输入/输出流使用 ISO 8859-1 字符编码外,load(InputStream) / store(OutputStream, String) 方法与 load(Reader)/store(Writer, String) 对的工作方式完全相同。可以使用 Unicode 转义来编写此编码中无法直接表示的字符;转义序列中只允许单个 'u' 字符。可使用 native2ascii 工具对属性文件和其他字符编码进行相互转换。

loadFromXML(InputStream) 和 storeToXML(OutputStream, String, String) 方法按简单的 XML 格式加载和存储属性。默认使用 UTF-8 字符编码,但如果需要,可以指定某种特定的编码。XML 属性文档具有以下 DOCTYPE 声明:

 <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
 
注意,导入或导出属性时 访问系统 URI (http://java.sun.com/dtd/properties.dtd);该系统 URI 仅作为一个唯一标识 DTD 的字符串:
    <?xml version="1.0" encoding="UTF-8"?>

    <!-- DTD for properties -->

    <!ELEMENT properties ( comment?, entry* ) >

    <!ATTLIST properties version CDATA #FIXED "1.0">

    <!ELEMENT comment (#PCDATA) >

    <!ELEMENT entry (#PCDATA) >

    <!ATTLIST entry key CDATA #REQUIRED>

Properties简单使用:


package properties;

import java.util.Properties;
import java.util.Set;

/**
 * 
 * @author Angus
 *	Properties
 *		可以和IO流结合使用,建和值都是字符串
 *	Properties的父类为HashTable,可以看成Map体系的。
 */
public class PropertiesDemo {

	public static void main(String[] args) {
		//创建集合对象
		Properties prop = new Properties();
		//添加元素
		prop.put("001", "hello");
		prop.put("002", "world");
		prop.put("003", "java");
		
		//遍历
		Set<Object> keySet = prop.keySet();
		for (Object object : keySet) {
			Object object2 = prop.get(object);
			System.out.println(object+"****"+object2);
		}
		
	}

}
结果


特殊方法的使用:

package properties;

import java.util.Properties;
import java.util.Set;

/**
 * 
 * @author Angus
 * 特殊方法:
 * 	1;修改
 * 		setProperty(String key, String value)  调用 Hashtable 的方法 put。
 * 	2:获取
 * 		getProperty(String key) 用指定的键在此属性列表中搜索属性。	
 * 		getProperty(String key, String defaultValue) 用指定的键在属性列表中搜索属性。
 * 		stringPropertyNames() 返回此属性列表中的键集,其中该键及其对应值是字符串,如果在主属性列表中未找到同名的键,则还包括默认属性列表中不同的键。
 */
public class PropertiesDemo {

	public static void main(String[] args) {
		//创建集合对象
		Properties prop = new Properties();
		//添加元素
		prop.setProperty("001", "hello");
		prop.setProperty("002", "world");
		prop.setProperty("003", "java");
		
		System.out.println(prop.getProperty("001"));
		System.out.println(prop.getProperty("002"));
		System.out.println(prop.getProperty("003"));
		System.out.println("----------------------------------");
		System.out.println(prop.getProperty("003", "没有啊"));
		System.out.println(prop.getProperty("004", "没有啊"));
		System.out.println("----------------------------------");
		Set<String> set = prop.stringPropertyNames();
		for (String key : set) {
			String value = prop.getProperty(key);
			System.out.println(key+"***"+value);
		}
		System.out.println("----------------------------------");
		//遍历
		Set<Object> keySet = prop.keySet();
		for (Object object : keySet) {
			Object object2 = prop.get(object);
			System.out.println(object+"****"+object2);
		}
		
	}

}


结果:


系统属性方法:getProperties

package properties;

import java.util.Properties;
import java.util.Set;

/**
 * @author Angus
 * 	getProperties 系统属性
 */
public class PropertiesDemo {

	public static void main(String[] args) {
		Properties prop = System.getProperties();
		System.out.println(prop.size());
		
		Set<String> set = prop.stringPropertyNames();
		for (String key : set) {
			String value = prop.getProperty(key);
			System.out.println(key+"****"+value);
		}
	}

}

各种属性;




Properties和IO流的结合

package properties;

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Properties;
import java.util.Set;

/**
 * @author Angus
 * 	Properties和IO流的结合
 * 	list(PrintStream out)   将属性列表输出到指定的输出流。
 * 	list(PrintWriter out) 将属性列表输出到指定的输出流。
 */
public class PropertiesDemo {

	public static void main(String[] args) throws IOException{
		//获取系统的属性集合
		Properties prop  =System.getProperties();
		
		//需求,把数据写到文本文件
		//方式一  但是这样并没有结合到一起
//		BufferedWriter bw = new BufferedWriter(new FileWriter("a.txt"));
//		
//		Set<String> stringPropertyNames = prop.stringPropertyNames();
//		for (String string : stringPropertyNames) {
//			String property = prop.getProperty(string);
//			bw.write(string);
//			bw.write("=");
//			bw.write(property);
//			bw.newLine();
//			bw.flush();
//		}
//		bw.close();
		
		//方式二  list(PrintWriter out)
		PrintWriter pw = new PrintWriter("b.txt");
		prop.list(pw);
		pw.close();
	}

}





结果;



从文本文件加载数据

package properties;

import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Properties;
import java.util.Set;

/**
 * @author Angus
 * 
 * 	从文本文件加载数据
 * 	load(InputStream inStream) 从输入流中读取属性列表(键和元素对)。
 * 	load(Reader reader)  按简单的面向行的格式从输入字符流中读取属性列表(键和元素对)。
 */
public class PropertiesDemo {

	public static void main(String[] args) throws IOException{
		Properties prop = new Properties();
		
		//创建FileReader对象
		FileReader fr = new FileReader("a.txt");
		prop.load(fr);
		fr.close();
		
		System.out.println(prop.size()); //4
		System.out.println(prop); //{张三4=114, 张三3=113, 张三2=112, 张三1=111}
	
		Set<String> stringPropertyNames = prop.stringPropertyNames();
		for (String key : stringPropertyNames) {
			String value = prop.getProperty(key);
			System.out.println(key+"***"+value);
		}
	}

}





结果;




最后附上JDK使用文档API 下载




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值