IO流之FileWriter小事项
FileWriter是用来用来写入字符文件的类,默认会覆盖之前已经存在的文件。
我们现在有一个小需求,就是将一个配置文件中的值替换掉,该怎么做呢?
思路是用map中的Properties的laod方法获取文件中的键值对,然后用setProperties方法替换键对应的值,最后用store方法写入文件。
import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.util.Properties; import java.io.File; class test { public static void main(String[] args) throws IOException { change("老龟","无限"); } public static void change(String key,String value) throws IOException { Properties pro=new Properties(); File file=new File("C:\\Users\\fan\\Desktop\\demo.txt"); FileReader fr=new FileReader(file); FileWriter fw=new FileWriter(file); pro.load(fr); pro.setProperty(key,value); pro.store(fw,"change"); fr.close(); fw.close(); } }
如果按上面的执行,原文件又没有备份的话,你估计就得崩溃了。因为fileWriter会默认覆盖文件,导致的结果就是文件被清空了。那要怎么做呢,很简单,在输入流后面紧跟着就把文件中的键值对存到properties中,这样,实例化fileWriter之后可以把properties中的数据再写入文本,代码做如下改动即可
import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.util.Properties; import java.io.File; class test { public static void main(String[] args) throws IOException { change("老龟","无限"); } public static void change(String key,String value) throws IOException { Properties pro=new Properties(); File file=new File("C:\\Users\\fan\\Desktop\\demo.txt"); FileReader fr=new FileReader(file); pro.load(fr); FileWriter fw=new FileWriter(file); pro.setProperty(key,value); pro.store(fw,"change"); fr.close(); fw.close(); } }