为什么:FileOutputStream output = new FileOutputStream("src/dcj/io/test.txt"); 这一句必须放在load()方法之后?求解释+原理?
import java.io.*;
import java.util.*;
/**
* 在test.txt文件中存入下面四组值以便操作
* 4=yui
3=gfl
2=jy
1=qwer
* Properties是hashtable的字类
* 也就是说他具备Map集合的特点,但是键值都必须是字符串
* 是集合与IO技术相结合的集合容器
*
* 该对象的特点:用于键值对形式的配置文件
*
*/
public class PropertiesDemo {
public static void main(String[] args) throws IOException {
Properties prop = new Properties();
//定义在这里是不行的,会只保存修改的数据,其它数据都被删除了。
//FileOutputStream output = new FileOutputStream("src/dcj/io/test.txt");
//目标文件
FileInputStream input = new FileInputStream("src/dcj/io/test.txt");
prop.load(input);
//******修改后写入文件,输出流为啥必须定义在load()后面?
FileOutputStream output = new FileOutputStream("src/dcj/io/test.txt");
prop.setProperty("4", "jack");
prop.list(System.out);
prop.store(output,"-- listing properties --");
output.close();
input.close();
}
//需求:模拟load(InputStrean in);方法,将test.txt中数据存入到集合中进行操作
/*
* 1,用一个流关联该文件
* 2,读取一行数据,将该数据用等号进行切割
* 3,等号左边为键,右边为值存入Properties中即可
*/
public static void method_1() throws IOException{
//获取目标文件
BufferedReader br = new BufferedReader(new FileReader("D:\\test.txt"));
//将对象以键值形式存入在Properties对象中
Properties prop = new Properties();
String str = null;
String[] s;
//读取一行
while((str=br.readLine()) != null){
s = str.split("=");
if(s.length == 2){
//存入Properties对象
prop.setProperty(s[0], s[1]);
}
}
br.close();
System.out.println(prop);
}
}
|