Properties
类表示一组持久的属性。 Properties
可以保存到流中或从流中加载。 属性列表中的每个键及其对应的值都是一个字符串。
属性列表可以包含另一个属性列表作为其“默认值”; 如果在原始属性列表中找不到属性键,则会搜索此第二个属性列表。
因为Properties
从继承Hashtable
时, put
种putAll
方法可应用于Properties
对象。 强烈不鼓励使用它们,因为它们允许调用者插入其键或值不是Strings
。 应该使用setProperty
方法。 如果store
或save
方法在包含非String
键或值的“受损害” Properties
对象上调用,则调用将失败。 类似地,如果在包含非String
密钥的“受损害” Properties
对象上调用propertyNames
或list
方法的调用将失败。
load(Reader)
/
store(Writer, String)
方法从以下指定的简单的线性导向格式加载和存储基于字符的流的属性。 load(InputStream)
/
store(OutputStream, String)
方法与加载(读取器)/存储(Writer,String)对相同,除了输入/输出流以ISO 8859-1字符编码编码。 在该编码中不能直接表示的字符可以使用The Java™ Language Specification的 3.3节中定义的Unicode转义来编写; 在转义序列中只允许使用单个“u”字符。 native2ascii工具可用于将属性文件转换为其他字符编码。
loadFromXML(InputStream)
和storeToXML(OutputStream, String, String)
方法以简单的XML格式加载和存储属性。 默认情况下,使用UTF-8字符编码,但是如果需要,可以指定特定编码。 需要实现支持UTF-8和UTF-16,并可能支持其他编码。
package com.io.properties;
import java.util.Properties;
import java.util.Set;
/*
java.util.Properties集合 extends Hashtable implements Map
Properties类表示了一个持久的属性集。Properties 可保存在流中或从流中加载
Properties集合是唯一和IO流相结合的集合
可以使用Properties集合中的方法store,把集合中的临时数据,持久化写入到硬盘中存储
可以使用Properties集合中的方法load,把硬盘中保存的文件(键值对),读取到集合中使用
属性列表中每个键及其对应值都是一个字符串。
Properties集合是一个双列集合,key和value默认都是字符串
*/
public class PropertiesDemo01 {
public static void main(String[] args) {
show01();
}
/*
使用Properties集合存储数据,遍历取出Properties集合中的数据
Properties集合是一个双列集合,key和value默认都是字符串
Properties集合有一些操作字符串的特有方法:
Object setProperty(String key,String value)调用Hashtable 的方法put。
String getProperty(String key)通过ket找到value值,此方法相当于Map集合中的get(key)方法
SetstringPropertyNames()返回此属性列表中的一组键,其中键及其对应的值为字符串,相当于Map中的keyset方法。
*/
private static void show01() {
//创建Properties集合对象
Properties prop = new Properties();
//使用setProperty往集合中添加数据
prop.setProperty("张三","168");
prop.setProperty("张四","188");
prop.setProperty("张五","178");
//prop.put(1,true);
//使用stringPropertyNames把Properties集合中的键取出,存储到一个Set集合中
Set<String> set = prop.stringPropertyNames();
//遍历Set集合,取出Properties集合的每一个键
for (String key : set){
String value = prop.getProperty(key);
System.out.println(key+"="+value);
}
}
}
Properties
表中,以适合于使用 load(InputStream)
方法加载到 Properties
表中的格式输出流。Properties
表中,以适合使用 load(Reader)
方法的格式输出到输出字符流。public class PropertiesDemo01 {
public static void main(String[] args) throws IOException {
//show01();
show02();
}
/*
可以使用Properties集合中的方法store,把集合中的临时数据,持久化写入到硬盘中存储
store(OutputStream out, String comments)
store(Writer writer, String comments)
参数:
OutputStream out:字节输出流,不能写入中文
Writer writer:字符输出流,可以写中文
String comments:注释,用来解释说明保存的文件是做什么用的
不能使用中文,会产生乱码,默认是Unicode编码
一般使用"空字符串"
使用步骤:
1.创建Properties集合对象,添加数据
2.创建字节输出流/字符输出流对象,构造方法中绑定要输出的目的地
3.使用Properties集合中的方法store,把集合中的临时数据,持久写入到硬盘中存储
4.释放资源
*/
private static void show02() throws IOException {
//1.创建Properties集合对象,添加数据
Properties prop = new Properties();
prop.setProperty("张三","168");
prop.setProperty("张四","188");
prop.setProperty("张五","178");
//2.创建字节输出流/字符输出流对象,构造方法中绑定要输出的目的地
FileWriter fw = new FileWriter("C:\\abc\\prop.txt");
//3.使用Properties集合中的方法store,把集合中的临时数据,持久写入到硬盘中存储
prop.store(fw,"sava data");
//4.释放资源
fw.close();
}
load(InputStream inStream) :从输入字节流读取属性列表(键和元素对)。
load(Reader reader) :以简单的线性格式从输入字符流读取属性列表(关键字和元素对)。
代码实例如下:
public class PropertiesDemo01 {
public static void main(String[] args) throws IOException {
//show01();
//show02();
show03();
}
/*
可以使用Properties集合中的方法load,把硬盘中保存的文件(键值对),读取到集合中使用
load(InputStream inStream)
load(Reader reader)
参数:
InputStream inStream:字节输入流,不能读取含有中文的键值对
Reader reader:字符输入流,能读取含义中文的键值对
使用步骤:
1.创建Properties集合对象
2.使用Properties集合对象中的方法load读取保存键值对的文件
3.遍历Properties集合
注意:
1.存储键值对的文件中,键与值默认的连接符合可以使用=,空格(其他符号)
2.存储键值对的文件中,可以使用#进行注释,被注释的键值对不会再被读取
3.存储键值对的文件中,键与值默认都是字符串,不用再加引号
*/
private static void show03() throws IOException {
//1.创建Properties集合对象
Properties prop = new Properties();
//2.使用Properties集合对象中的方法load读取保存键值对的文件
prop.load(new FileReader("C:\\abc\\prop.txt"));
//3.遍历Properties集合
Set<String> set = prop.stringPropertyNames();
for (String key : set){
String value = prop.getProperty(key);
System.out.println(key+"="+value);
}
}