目录
2. 使用 Properties 集合加载 .properties 文件
1. Properties 集合简介
流的使用,为我们提供了诸多把数据永久保存的方法,但问题也随之出现。这些被写入的数据没有相对固定的规格,程序端若想要获取其中的有用数据,就必须知道这些数据的组合规则,再根据其特点获取其中的有用信息。例如文件中保存一组数据:
账户:smallOrange
密码:123456
邮箱:12345678@qq.com
尽管这组数据看起来很整齐,方便阅读,但若想要计算机准确的读入其中的有用信息,还是要在读入时设置繁杂的步骤。比如按冒号隔开读取等等一些列的操作,这样就严重的影响获取数据的效率。要想提高效率,就必须规定一套统一的读写规则,这样就无需再去专门花费时间来研究数据的组合规则,并针对此规则设计读入方法。
为此,Java 引入了 Properties 集合。此集合继承自 HashTable,但却是所有集合中唯一可以直接操作流的集合,并且还规定了数据的读写规则。 正因为如此,该集合可以直接实现数据的持久化,而无需上面所提到的那些繁琐复杂的步骤。
Properties 集合的特点:
① Properties类表示了一个持久的属性集。
② Properties可保存在流中,或从流中加载。
③ 属性列表中每个键及其对应值都是一个字符串。
④ 两个唯一:唯一可以直接操作流的集合;唯一没有泛型的集合。
Properties 集合的使用场景:
在很多需要避免硬编码的应用场景下需要使用 .properties 文件来加载程序需要的配置信息,比如JDBC、MyBatis框架等。Properties 集合则是 properties 文件和程序的中间桥梁,不论是从 .properties 文件读取信息还是写入信息到 properties 文件都要经由 Properties 集合。Properties 不仅可以加载 .properties 文件,还可以用来加载 .xml 文件。
2. 使用 Properties 集合加载 .properties 文件
(1)Properties 集合常用方法介绍
String | getProperty(String key) 用指定的键在此属性列表中搜索属性。 |
void | load(InputStream inStream) 从输入流中读取属性列表(键和元素对)。 |
void | load(Reader reader) 按简单的面向行的格式从输入字符流中读取属性列表(键和元素对)。 |
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 表中的属性列表(键和元素对)写入输出字符。 |
Set<String> | stringPropertyNames() 返回此属性列表中的键集,其中该键及其对应值是字符串,如果在主属性列表中未找到同名的键,则还包括默认属性列表中不同的键。 |
(2)什么是 .properties 文件
一种规定了文本内容书写格式的文本文件,文件中的内容格式必须为:key值 = value值。这种格式正是基于 Properties 集合规定的,方便读取。.properties 文件是 Java 默认的配置文件!
(3)使用 load( ) 方法加载配置文件
@Test
public void load() throws IOException {
//文件路径
String filePath = "src\\com\\java\\day12\\file.properties";
//创建字符流(因为要加载中文)
FileReader fileReader = new FileReader(filePath);
//创建Properties集合
Properties properties = new Properties();
//使用字符流加载文件
properties.load(fileReader);
//独有的获取键集合的方法
Set<String> strings = properties.stringPropertyNames();
//打印Properties集合信息
for (String key:strings){
System.out.println(key+" = "+properties.getProperty(key));
}
//关闭资源
fileReader.close();
}
(4)使用 store( ) 方法写入 Properties 集合数据
@Test
public void store() throws IOException {
//文件路径
String filePath = "src\\com\\java\\day12\\store.properties";
//创建字符流(因为要写入中文)
FileWriter writer = new FileWriter(filePath);
//创建Properties集合
Properties properties = new Properties();
//键入信息
properties.setProperty("数据库","MySQl");
properties.setProperty("版本","5.0");
properties.setProperty("用户","root");
properties.setProperty("密码","123456");
//写入文件
//第二个参数为注释,且不能为中文
properties.store(writer,"SQL info");
//关闭资源
writer.close();
}
3. 用 Properties 集合加载 .xml 文件
(1)什么是 .xml 文件
Extensible Markup Language,简称 XML,中文含义是可扩展标记语言,该语言与 HTML 类似,主要功能是传输数据、储存数据和共享数据。XML 语言没有规定的标签体,需要自定义标签,是一种自我描述的语言。XML 与 HTML 有着本质的区别,XML 传输和存储数据,而 HTML 用来显示数据。
使用 .xml 文件作为属性文件必须要在文件中加入以下的声明,并严格遵循以下格式:
声明: <!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd"> 格式: <properties> <comment>注释</comment> <entry key="键">值</entry> </properties>
(2)使用 storeToXML( ) 方法写入数据
void | storeToXML(OutputStream os, String comment) 发出一个表示此表中包含的所有属性的 XML 文档。 |
void | storeToXML(OutputStream os, String comment, String encoding) 使用指定的编码发出一个表示此表中包含的所有属性的 XML 文档。 |
@Test
public void xmlStore() throws IOException {
//文件路径
String filePath = "src\\com\\java\\day12\\file.xml";
//创建字符流(因为要写入中文)
FileOutputStream fos = new FileOutputStream(filePath);
//创建Properties集合
Properties properties = new Properties();
//键入信息
properties.setProperty("数据库","MySQl");
properties.setProperty("版本","5.0");
properties.setProperty("用户","root");
properties.setProperty("密码","123456");
//写入文件
//第二个参数为注释,且不能为中文
properties.storeToXML(fos,"SQL data","utf-8");
//关闭资源
fos.close();
}
(3)使用 loadFromXML( ) 方法加载数据
void | loadFromXML(InputStream in) 将指定输入流中由 XML 文档所表示的所有属性加载到此属性表中。 |
具体操作与加载 .properties 文件相同,此处不再演示。