通常我们在项目开发过程当中都是会遇见一个场景,那就是要将一些配置信息写到一个文件当中去,而这个文件的后缀注明就是“.properties”,我们一开始在学习的时候,就有人告诉我们,这个文件应该命名成"XXX.properties"的形式。中文翻译,就是属性,特性的意思。
那么它到底是干什么的,今天就来总结总结下,看看具体的再更加深入了解下。
一、Properties的概述
properties 类表示了一个持久的属性集。
Properties 可保存在流中或从流中加载。
属性列表中每个键及其对应值都是一个字符串。
特点:
1、hashtable的子类,也即Map接口的子类,map中的方法都可以用。
2、该集合没有泛型。键值都是字符串。
3、它是一个可以持久化的属性集。键值可以存储到集合中,也可以存储到持久化的设备(硬盘、U盘、光盘)上。键值的来源也可以是持久化的设备。
4、有和流技术相结合的方法。
二、常用的方法
- public Object setProperty(String key, String value)调用 Map 的方法 put。
- public Set<String> stringPropertyNames()返回此属性列表中的键集,
- public String getProperty(String key)用指定的键在此属性列表中搜索属性
三、示例代码
案例代码1:利用Properties存储键值对
public class PropsDemo_01 {
@Test
public void demo01(){
//Properties对象 特殊Map<String,String>
//1 创建对象
Properties props = new Properties();
//2 设置数据
//props.put(key, value)
props.setProperty("k01", "v01");
props.setProperty("k02", "v02");
props.setProperty("k03", "v03");
//3 获得指定名称的数据
String prop = props.getProperty("k02");
System.out.println(prop);
//4获得所有名称,并遍历获得所有的数据
System.out.println("--------------");
Set<String> names = props.stringPropertyNames();
for(String name : names){
String value = props.getProperty(name);
System.out.println(name + " : " + value);
}
}
}
import java.util.Map;
import java.util.Properties;
import java.util.Set;
/*
* Properties:表示了一个持久的属性集,属性列表中每个键及其对应值都是一个字符串
*
* 构造方法:
* Properties()
*/
public class PropertiesDemo2 {
public static void main(String[] args) {
//创建属性列表对象
Properties prop = new Properties();
//添加映射关系
prop.put("CZBK001", "zhangsan");
prop.put("CZBK002", "lisi");
prop.put("CZBK003", "wangwu");
//遍历属性列表
//获取所有的key,通过key获取value
Set<Object> keys = prop.keySet();
for (Object key : keys) {
Object value = prop.get(key);
System.out.println(key + "=" + value);
}
System.out.println("------------------");
//获取所有的键值对对象
Set<Map.Entry<Object,Object>> entrys = prop.entrySet();
for (Map.Entry<Object, Object> entry : entrys) {
Object key = entry.getKey();
Object value = entry.getValue();
System.out.println(key + "=" + value);
}
}
}
四、Properties的加载文件与写入文件以及和流的结合
4.1 将集合中内容存储到文件
- store(OutputStream,comments)
- stroe(Writer,comments);
其中把集合中的数据,保存到指定的流所对应的文件中,参数comments代表对其的描述信息
示例代码:
@Test
public void demo01() throws Exception{
//将内容写入到文件
// * Properties 对应一种特殊文件:*.properties
// * 一行表示一个键值对,格式:k=v
//1 创建对象
Properties props = new Properties();
//2 设置数据
//props.put(key, value)
props.setProperty("k01", "v01");
props.setProperty("k02", "v02");
props.setProperty("k03", "v03");
//3 将props写入到硬盘
Writer writer = new OutputStreamWriter(new FileOutputStream("1.properties"),"UTF-8");
props.store(writer, "描述");
writer.close();
}
4.2 读取文件中的数据,并保存到集合
- load(InputStream)
- load(Reader)
其中的load方法就是把指定流所对应的文件中的数据,读取出来,保存到Properties集合中
示例代码:
@Test
public void demo02() throws Exception{
//从properties文件中获得数据
//1 获得资源流
Reader reader = new InputStreamReader(new FileInputStream("1.properties"),"UTF-8");
//2 通过Properties对象加载流
Properties props = new Properties();
props.load(reader);
//3 遍历所有
for(String name : props.stringPropertyNames()){
String value = props.getProperty(name);
System.out.println(name + " @ " + value);
}
}
4.3 Properties与流结合使用
(添加时间2018-11-29 ,这部分内容是在流的相关学习记录上传之后添加的,如果这还没有看的,建议先看我的其他几篇关于流的学习,更好哦!)
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Properties;
/*
* Properties和IO流结合的功能:
void load(Reader reader)
void list(PrintWriter out)
void store(Writer writer, String comments)
*
*/
public class PropertiesDemo2 {
public static void main(String[] args) throws IOException{
//method();
//method2();
//创建属性列表对象
Properties prop = new Properties();
//添加映射关系
prop.setProperty("CZBK001", "zhangsan");
prop.setProperty("CZBK002", "lisi");
prop.setProperty("CZBK003", "wangwu");
//创建输出流对象
FileWriter fw = new FileWriter("e.txt");
//void store(Writer writer, String comments)
prop.store(fw, "hello world");
//释放资源
fw.close();
}
private static void method2() throws FileNotFoundException, IOException {
//创建属性列表对象
Properties prop = new Properties();
//创建一个输入流对象
FileReader fr = new FileReader("d.txt");
//void load(Reader reader)
prop.load(fr);
//释放资源
fr.close();
System.out.println(prop);
}
private static void method() throws FileNotFoundException {
//创建属性列表对象
Properties prop = new Properties();
//添加映射关系
prop.setProperty("CZBK001", "zhangsan");
prop.setProperty("CZBK002", "lisi");
prop.setProperty("CZBK003", "wangwu");
//创建打印流对象
PrintWriter out = new PrintWriter("d.txt");
//void list(PrintWriter out)
prop.list(out);
//释放资源
out.close();
}
}
以上。