集合中的数据都存储在内存中。
java.lang.Object
java.util.Dictionary<K,V>
java.util.Hashtable<Object,Object>
java.util.Properties
Properties 类表示了一个持久的属性集。Properties 可保存在流中或从流中加载。属性列表中每个键及其对应值都是一个字符串。
一个属性列表可包含另一个属性列表作为它的“默认值”;如果未能在原有的属性列表中搜索到属性键,则搜索第二个属性列表。
字段摘要 |
|
protected Properties |
defaults 一个属性列表,包含属性列表中所有未找到值的键的默认值。 |
构造方法摘要 |
|
Properties() 创建一个无默认值的空属性列表。 |
|
Properties(Properties defaults) 创建一个带有指定默认值的空属性列表。 |
方法摘要 |
|
String |
getProperty(String key) 用指定的键在此属性列表中搜索属性。 |
String |
getProperty(String key, String defaultValue) 用指定的键在属性列表中搜索属性。 |
void |
list(PrintStream out) 将属性列表输出到指定的输出流。 |
void |
list(PrintWriter out) 将属性列表输出到指定的输出流。 |
void |
load(InputStream inStream) 从输入流中读取属性列表(键和元素对)。 |
void |
load(Reader reader) 按简单的面向行的格式从输入字符流中读取属性列表(键和元素对)。 |
void |
loadFromXML(InputStream in) 将指定输入流中由 XML 文档所表示的所有属性加载到此属性表中。 |
Enumeration<?> |
propertyNames() 返回属性列表中所有键的枚举,如果在主属性列表中未找到同名的键,则包括默认属性列表中不同的键。 |
void |
save(OutputStream out, String comments) 已过时。 如果在保存属性列表时发生 I/O 错误,则此方法不抛出 IOException。保存属性列表的首选方法是通过 store(OutputStream out, String comments) 方法或 storeToXML(OutputStream os, String comment) 方法来进行。 |
Object |
setProperty(String key, String value) 调用 Hashtable 的方法 put。 |
void |
store(OutputStream out, String comments) 以适合使用 load(InputStream) 方法加载到 Properties 表中的格式,将此 Properties 表中的属性列表(键和元素对)写入输出流。 |
void |
store(Writer writer, String comments) 以适合使用 load(Reader) 方法的格式,将此 Properties 表中的属性列表(键和元素对)写入输出字符。 |
void |
storeToXML(OutputStream os, String comment) 发出一个表示此表中包含的所有属性的 XML 文档。 |
void |
storeToXML(OutputStream os, String comment, String encoding) 使用指定的编码发出一个表示此表中包含的所有属性的 XML 文档。 |
Set<String> |
stringPropertyNames() 返回此属性列表中的键集,其中该键及其对应值是字符串,如果在主属性列表中未找到同名的键,则还包括默认属性列表中不同的键。 |
package cn.test.properties;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Properties;
import java.util.Set;
public class PropertiesDemo {
public static void main(String[] args) throws FileNotFoundException, IOException {
/**
* Properties的特点:
* 1:该集合中的键和值都是字符串类型
* 2:集合中的数据可以保存到流中,或者从流中获取
* 该集合通常用于操作以键值对形式存在的配置文件
* 配置文件:就是存储信息的文件,只是这些信息用于程序的初始化
*/
//propertiesDemo();
//methodDemo();
//store();
read();
}
/**
* Properties集合的存和取
*
*/
public static void propertiesDemo(){
//创建一个properties集合
Properties prop = new Properties();
prop.setProperty("zhangsan", "20");
prop.setProperty("zhangsan1", "21");
prop.setProperty("zhangsan2", "22");
prop.setProperty("zhangsan3", "23");
//修改元素的值 键相同,值覆盖
prop.setProperty("zhangsan", "26");
//取出所有元素
Set<String> names = prop.stringPropertyNames();
//遍历集合
for (String name : names) {
String value = prop.getProperty(name);
System.out.println(name +" "+value);
}
}
/**
* 演示Properties集合与流对象的结合
* list 此方法用于调试程序
*/
private static void methodDemo() {
//创建一个properties集合
Properties prop = new Properties();
prop.setProperty("zhangsan", "20");
prop.setProperty("zhangsan1", "21");
prop.setProperty("zhangsan2", "22");
prop.setProperty("zhangsan3", "23");
//获取系统信息
prop =System.getProperties();
prop.list(System.out);
}
/**
* Properties数据持久化存储
* void store(OutputStream out, String comments)
以适合使用 load(InputStream) 方法加载到 Properties 表中的格式,将此 Properties 表中的属性列表(键和元素对)写入输出流。
void store(Writer writer, String comments)
以适合使用 load(Reader) 方法的格式,将此 Properties 表中的属性列表(键和元素对)写入输出字符。
void storeToXML(OutputStream os, String comment)
发出一个表示此表中包含的所有属性的 XML 文档。
void storeToXML(OutputStream os, String comment, String encoding)
使用指定的编码发出一个表示此表中包含的所有属性的 XML 文档。
* @throws FileNotFoundException
*/
public static void store() throws FileNotFoundException,IOException{
//创建一个properties集合
Properties prop = new Properties();
prop.setProperty("zhangsan", "20");
prop.setProperty("zhangsan1", "21");
prop.setProperty("zhangsan2", "22");
prop.setProperty("zhangsan3", "23");
//将信息持久化存储
FileOutputStream fos = new FileOutputStream("aaaa.txt");
prop.store(fos, "name+age");
fos.close();
}
/**
* 从文件中读取数据
* @throws FileNotFoundException
*/
public static void read() throws FileNotFoundException,IOException{
Properties prop = new Properties();
//集合中的数据来自于文件
//必须保证文件中的数据时键值对
FileInputStream fis = new FileInputStream("aaaa.txt");
//加载数据到流中
prop.load(fis);
prop.list(System.out);
}
//load原理
public static void load() throws IOException{
Properties prop = new Properties();
BufferedReader bufr = new BufferedReader(new FileReader("info.txt"));
String line = null;
while((line = bufr.readLine()) !=null){
if(line.startsWith("#")){
continue;
}
String[] arr =line.split("=");
System.out.print(arr[0] +"::"+arr[1]);
prop.setProperty(arr[0], arr[1]);
}
prop.list(System.out);
bufr.close();
}
//修改文件中的值
/**
* 读取文件
* 将文件中的键值对存储到集合中
* 在集合中进行修改
* 然后写回到文件中
*
*/
public static void update() throws FileNotFoundException,IOException{
Properties prop = new Properties();
File file = new File("aaaa.txt");
if(!file.exists()){
file.createNewFile();
}
FileReader fr = new FileReader(file);
prop.load(fr);
prop.setProperty("zhangsan", "91");
//文件的读写尽量在需要的时候在操作。
FileWriter fw = new FileWriter(file);
prop.store(fw, "info");
fw.close();
fr.close();
}
}