Map接口有一个实现类Hashtable,而Hashtable中存在Properties这一子类。Properties类在实际应用中非常重要。
不同的编程语言有着不同的配置文件,而且配置文件里的很多变量是要经常做修改的,为了方便用户配置,让用户能够脱离程序本身去修改相关的变量配置,这时候Properties就派上用场了。它主要用来存储字符串类型的键和值,在实际开发中,经常使用它来存取应用的配置项。
Properties中的方法:
其中的一些常用方法:
1、public Properties() 创建一个没有默认值的空属性列表。
2、public void load(InputStream inStream)
(记得要throws IOException)
从输入字节流读取属性列表(键和元素对)。 输入流采用load(Reader)中规定的简单的面向行的格式。
3、public Object setProperty(String key,String value) 类似于put一样添加新的键值对,如果key和value缺少一个, 则为null 。
4、public void store(OutputStream out,String comments)
(也需要throws IOException)
将此属性列表(键和元素对)写入此Properties表中,以适合于使用load(InputStream)方法加载到Properties表中的格式输出流。 如果comments参数不为空,则首先将ASCII #字符,注释字符串和行分隔符写入输出流。
此Properties表(如果有)的默认表的Properties 不会被此方法写出。
在写入条目之后,输出流被刷新。 此方法返回后,输出流保持打开状态。
关于comments:如果comments参数不为空,则首先将ASCII #字符,注释字符串和行分隔符写入输出流。 因此, comments可以作为识别评论。 由注释中的换行符(’\ n’),回车符(’\ r’)或回车符后面的换行符替换为由Writer生成的行分隔Writer ,如果下一个字符在评论不是字符#或字符!那么ASCII #是该行分隔符后写出。 接下来,注释行始终写入,由ASCII #组成,当前日期和时间(如当前时间Date的toString方法生成的)以及由Writer生成的行分隔Writer 。
然后,这个Properties表中的每个条目都被写出,每行一个。 对于每个条目,键字符串被写入,然后是ASCII = ,然后是相关联的元素字符串。 对于密钥,所有空格字符都用前面的\字符写入。 对于元素,前导空格字符,但不是嵌入或尾随空格字符,写入前面的\字符。 键和元素字符# , ! , =和:被写入时加上正斜杠,以确保它们被正确装载。
参数 out - 输出流。 comments - 属性列表的描述。
5、public void storeToXML(OutputStream os, String comment)
(也需要throws IOException)
发出表示此表中包含的所有属性的XML文档。
6、public void list(PrintStream out)
将此属性列表打印到指定的输出流。 此方法对调试非常有用。
以下是一个关于Properties的常用方法的小代码,方便我们更好的理解~
package com.company;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.Scanner;
import java.util.Properties;
public class Task {
public static void main(String[] args) throws Exception{
//创建Properties对象
Properties pps=new Properties();
//加载要读取的文件test.properties
FileInputStream ins=new FileInputStream("test.properties");
pps.load(ins);
//加入新的键值对
pps.setProperty("First","Fisrt_value");
//遍历一下此时文件中的内容
pps.forEach((k,v)-> System.out.println(k+"="+v));
//使用store写入新的键值对,指定要写入操作的文件名称和位置
FileOutputStream ous=new FileOutputStream("test.properties");
//向Properties类文件进行写入键值对信息
pps.setProperty("Second","Second_value");
pps.store(ous,"new_content");
System.out.println("----------------------------");
pps.forEach((k,v)-> System.out.println(k+"="+v));
System.out.println("-----------------------------");
//使用list方法,该方法多用于调试
pps.list(System.out);
}
}
输出结果:
最终test.Properties内容: