Java基础:IO流之Properties

Properties 简介

Properties 是 Hashtable 的子类,具有 Map 集合的特点,存储的是键值对的数据,且都是 String 类型的。

其实此类严格意义上将不属于 IO 流部分因为它是 java.util 包中的而非 java.io 包,但是它却是集合与 IO 技术的集合容器。

常用方法

存取和读取

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public static void setAndGet() {
Properties prop = new Properties();

//存取一个配置
prop.setProperty("name", "Join");
prop.setProperty("age", "18");

//读取一个配置
String age = prop.getProperty("age");
System.out.println("age:" + age);

Set<String> propSet = prop.stringPropertyNames();

for (String s : propSet) {
System.out.println(s + "=" + prop.getProperty(s));
}

}

从文件中读取配置信息

有文件 e:\info.ini ,文件内容是:

name=Join
age=16
Phone=13800000000
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public static void loadDemo() throws IOException {
FileInputStream fis = new FileInputStream("e:\\info.ini");

Properties prop = new Properties();
prop.load(fis);

//读取配置中所有的键的 Set 集合表现形式
Set<String> propSet = prop.stringPropertyNames();

for (String s : propSet) {
System.out.println(s + ":" + prop.getProperty(s));
}

fis.close();
}

将配置信息写入到文件中

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public static void storeDemo() throws IOException {
Properties prop = new Properties();

//存取一个配置
prop.setProperty("name", "Join");
prop.setProperty("age", "18");

FileOutputStream fos = new FileOutputStream("E:\\storeDemo.ini");

//第一个参数是输出流,第二个是注释信息。
prop.store(fos, "storeDemo");

fos.close();
}

load 方法和 store 方法中可以写字符流 Reader 也可以写字节流 InputStream,传入字节流的方法是 JDK 1.6 才出现的。

综合练习

用配置文件记录一个程序运行的次数,当运行次数达到 10 次,则提示用户”试用次数已到”。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
package io;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;

public class PropertiesDemo {
public static void main(String[] args) throws IOException {

Properties prop = new Properties();

File file = new File("count.ini");

System.out.println(file.getAbsolutePath());
if (!file.exists()) {
file.createNewFile();
}

FileInputStream fis = new FileInputStream(file);
int count = 0;

prop.load(fis);

String value = prop.getProperty("count");

if (value != null) {
count = Integer.parseInt(value);
if (count >= 10) {
System.out.println("试用次数已到!");
return;
}
}

count++;

prop.setProperty("count", count + "");

FileOutputStream fos = new FileOutputStream(file);

prop.store(fos, "");

fos.close();
fis.close();

}
}

思路很简单,只需要先判断文件存在不存在,不存在则创建,存在则读取信息,如果没有这个信息,则写入一个初始值为 1 的次数,有的话则取出值,并增加一次,再存储起来。

坚持原创技术分享,您的支持将鼓励我继续创作!