一、文本流即字符流(按字符读入)
1.Reader和Writer2.FileReader和FileWriter
3.BufferedReader是一种处理流,用于一行一行地读取数据
4.PrintWriter是一种处理流,用于自动完成格式转换,如:不同系统中的\n,\r等
5.PrintStream是一种处理流。为其他输出流添加了功能,使它们能够方便地打印各种数据值表示形式,并且自动调用flush()方法
FileInputStream fis = new FileInputStream("a.txt");//将文件中的数据读到内存中的流
InputStreamReader isr = new InputStreamReader(fis,"GBK");//使用指定编码方式,可以与“a.txt”的编码方式保持一致,值需要修改编码方式即可
int c1 = isr.read(); //最低位两个字节是有效的
char c2 = (char) c1;
FileReader fr = new FileReader("a.txt");//采用默认编码GBK解析,可移植性差
BufferedReader br = new BufferedReader(fr);//处理流
String s1 = br.readLine(); //从fr流中找回车换行符,一行一行的读取数据,若返回值为null,表示文本文件已经读完了
小例子(将“中国梦”写到文件中):
FileOutputStream fos = new FileOutputStream("a.txt");
OutputStreamWriter osw = new OutputStreamWriter(fos,"UTF-8");//编码更加明确,与当前操作系统无关
osw.write("中国梦");
osw.flush();
osw.close();
fos.close();
另一种写法:
FileOutputStream fos = new FileOutputStream("a.txt");
OutputStreamWriter osw = new OutputStreamWriter(fos,"UTF-8");//编码更加明确,与当前操作系统无关
PrintWriter out = new PrintWriter(osw);//自动完成格式转换
out.println("中国梦");
二、Properties类(是一种集合)
java.util.Properties只支持字符串的名值对,字符串的key,字符串的value
聚合与继承可以相互转换
继承是强耦合关系,聚合是弱耦合关系
较推荐使用聚合,弱耦合,可移植性强
#成员函数
①String getProperty(String key);
②String setProperty(String key,String value);
③void load(InputStream in);//从输入字节流中读入一个字节
④void load(Reader reader);//从输入字符流中读入属性列表(每次读一列)
⑤void store(OutputStream out, String comments);//将属性列表输出到字节输出流中
⑥void store(Writer writer, String comments);//将属性列表中的一行输出到字符输出流中
#Java中的配置文件server = 192.168.1.123
port = 8090
level = 10
Properties p = new Properties();
p.setProperty("server","192.168.1.123");
p.load(new FileInputStream ("a.properties"));//从输入字节流中读取字符数据,将它转化为文本数据,存储在集合中
int port = Integer.parseInt(p.getProperty("port"));
p.store(new FileOutputStream("a.properties"),"COMMENTS!");
实现load()函数:
public void load(InputStream in) throws IOException{
InputStreamReader isr = new InputStreamReader(in ,"ISO-8859-1");
BufferedReader br = new BufferedReader(isr);
String s = null;
while(( s = br.readLine() != null){
s = s.trim();//去掉字符串前后的空格
if(s.startWith("#")){continue;} //#代表注释,是没有意义的数据
if(s.indexOf("=")==-1{continue;}//如果没有等号,则为无效数据
if(s.indexOf("=")!=s.lastIndexOf("="){continue;}//如果有两个等号,则为无效数据
String[ ] sa = s.split("=");//从等号处将字符串拆成子串
setProperty(sa[0],sa[1]);
//int p = s.indexOf("=");采取下面方法也可以,从等号处分开
//String name = s.subString(0,p);
//String value = s.subString(p+1);
//setProperty(name,value);
}
}