/**
* 【需求】现有配置信息已经存到系统文件(文件中数据为String类型的键值对)中,现在想将其读取到Properties集合中并做修改。
*
* 【思路】既然需要读取文件,那么就要关联流。
*/
package demo;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Properties;
public class PropertiesDemo {
public static void main(String[] args) throws IOException {
// PropertiesDemo_1();
myLoad();
}
public static void PropertiesDemo_1() throws FileNotFoundException,
IOException {
//1.新建集合
Properties prop = new Properties();
//2.集合中的数据来自于文件(注意:需要读取的数据必须为字符串键值对)
FileInputStream fis = new FileInputStream("info.txt");
prop.load(fis);//将info.txt中内容读取到集合prop中
prop.list(System.out);//用list方法调试,看prop集合中是否有内容。
}
public static void myLoad() throws IOException{//模拟集合Properties中load()方法,目的在于清楚load的实现过程和原理
Properties prop = new Properties();
BufferedReader bufr = new BufferedReader(new FileReader("info.txt"));
String line = null;
while((line = bufr.readLine())!=null){
if(line.startsWith("#"))
continue;//如果该行以“#”开头,说明是注释,不需要打印,直接continue
String[] str = line.split("=");//line是字符串,调用spilt方法切割,根据等号进行分割
//分割出来两部分,等号之前一部分(键),等号之后一部分(值),所以数组str中就两个元素,正好一个键一个值
prop.setProperty(str[0], str[1]);
}
bufr.close();
}
}
========================分割线==================================
/**
* 【练习】对已有的配置文件中的信息进行修改。(info.txt中的wangwu=03改为wangwu=007)
*
* 【思路】
* (1)读取文件,并将文件中的键值数据存储到集合中;
* (2)通过集合中的方法对数据进行修改;
* (3)用流将修改后的数据存储到文件中。
*/
package demo;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Properties;
public class PropertiesTest {
public static void main(String[] args) throws IOException{
//读取文件(切记先健壮性判断)
File file = new File("info.txt");
if(!file.exists())
file.createNewFile();
//至此,这个文件一定是存在的
FileReader fr = new FileReader(file);//流可以直接读取文件
//创建集合
Properties prop = new Properties();
//将流中信息存储到集合中
prop.load(fr);
prop.setProperty("wangwu", "007");//即使是createNewFile()方法新建的文件,也可以将wangwu=007写入
//将集合中的信息写入文件中,需要关联流
FileWriter fw = new FileWriter(file);
prop.store(fw, "name+number");
//【注意】这里不是直接在源文件里面修改配置信息,而是新建个文件,将源文件覆盖,之后将已经在集合中修改完成的信息
//写入新文件中
fw.close();
fr.close();
}
}