1.基本核心思路
(1)在项目文件夹下创建p
rop.txt文件,内容如下:
zhangsan=30
lisi=40
wangwu=50
(2)定义一个测试类PropertiesTest,在该类中创建Properties集合对象prop,创建FileReader字符输入流对象fr,其构造方法参数为文件名“prop.txt”; prop对象调用load()方法将文件中的数据加载到prop集合中来;fr调用close()方法关闭流;
(2)prop对象调用stringPropertyNames()方法获取键的集合set,使用增强for方式遍历键的集合set,获取得到每一个键,判断键是否有为"lisi"的,如果有就修改其值为"100";
(3)创建FileWriter字符输出流对象fw,其构造方法参数为文件名“prop.txt”; prop对象调用store()方法将集合中的数据保存到流对象fw所映射的文件prop.txt中去;fw调用close()方法关闭流,可以刷新项目文件夹查看prop.txt中修改后的数据。
package pack;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;
import java.util.Properties;
import java.util.Set;
public class PropertiesTest {
public static void main(String[] args) throws IOException {
Properties prop = new Properties();
Reader fr = new FileReader("prop.txt");
prop.load(fr);
fr.close();
Set<String> set=prop.stringPropertyNames();
for(String key:set ) {
if(key.equals("lisi")) {
prop.put(key, "100");
}
}
Writer w = new FileWriter("prop.txt");
prop.store(w, "");
w.close();
}
}
Properties是Map接口实现类hashtable下面的一个子类,主要用来存储字符串类型的键和值。
1.prop.load(fr);是用来读取文件的内容。
2.prop.put(key, "100");这个便是继承的map接口中的put方法,若是键值一样,则会直接覆盖。
3. prop.store(w, "");把集合中临时数据,持久化写入硬盘存储。
读取内用后,把数据的键值存入Set集合中,通过prop.stringPropertyNames()方法获取键值利用增强for循环
for(String key:set ) { if(key.equals("lisi")) { prop.put(key, "100"); }
流的分析
Reader fr = new FileReader("prop.txt"); Writer w = new FileWriter("prop.txt");
输入流使用的是字符输入流Reader子类IputStreamReader下的FileReader类,该类的构造方法参数可以是,文件路径,字符串,或者是file,不需要像使用IputStreamReader类的时候必须传递IputStream参数类型的字节流,便捷,高效。
输出流也是一样,注意一下,着的地方是用了向上转型,即子类对象当做父类类型使用,此时不需要任何声明,但是不能通过父类变量调用子类特有方法