Java之文本流与Properties类

一、文本流即字符流(按字符读入)

1.Reader和Writer
2.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); 
	}
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值