java基础之IO流--字符流

IO流主要分为:

InPut(输入流)
OutPut(输出流)
又可以分为:字节流和字符流

字符流的由来

字节流读取特定的字节信息后,不直接操作而是先查找指定的码表。获取对应的文字
简单的说就是:字节流+码表
IO流的常用基类(四个)
字节流的基类:
InPutStream和OutPutStream
字符流的基类:
Reader 和 Writer
它们的子类都是
FileReader和FileWriter(以基类结束)
如果要操作字符:
优先考虑字符流

FileWriter的用法

代码举例:

FileWriter fw = new FileWriter(".\\demo.txt");
fw.flush();//刷新

特点:
1.如果存在demo.txt在如上写法则会被覆盖,如果不存在则会自动创建。
2.如果需要保存着要调用flush方法,值得注意的是FileWriter调用的是系统资源,需要进行close操作。
3.FileWriter fw = new FileWriter(".\\demo.txt",true);
如果改成这样就可以进行续写操作。
当需要写入字符串并进行换行的时候
1.在Win下面可以使用\r\n
2.但是在其他操作系统下无法识别Win的换行符

fw.write("哈哈"+LINE_SEPARATOR+"呵呵");//第一行 哈哈 第二行 呵呵
private static final String LINE_SEPARATOR = System.getProperty("line.separator");

IO异常处理细节:
try的区间是封闭的,所以finally区间的代码如果调用fw会编译失败。
但可以在try区间外面定义fw,在try区间里边赋值;

FileReader

读取方式一:

	FileReader fr = new FileReader(".\\demo.txt");
	int ch =0;
	while((ch = fr.read())!=-1) {
		System.out.print((char)ch);
	}

读取方式二:

	char ch2 [] = new char[1024];//最好是1024的整数倍
	int ch3;
	while((ch3 = fr.read(ch2))!=-1) {//将其存入char数组
		System.out.print(new String(ch2,0,ch3));
	}

字符流的缓冲区:

BufferedWriter
在这里插入图片描述

	FileWriter fw = new FileWriter(".\\demo.txt");
	BufferedWriter bffw = new BufferedWriter(fw);
//	bffw.write("哈哈"+LINE_SEPARATOR+"呵呵");
	bffw.write("哈哈");
	bffw.newLine();//这个方法可以代替换行操作
	bffw.write("呵呵");
	bffw.flush();
	bffw.close();//同时可以关闭FileWriter

BufferedReader
它具有一个readline方法,可以读取一行,当读取完毕之后,String temp为空

装饰设计模式

对一组对象的功能进行增强就可以使用

装饰设计模式和继承的区别:
提高效率需要缓冲
继承可能会使得体系较为庞大(且底层API无法重新继承)
装饰设计模式可以使得缓冲单独封装
PS:装饰类和被装饰类必须同属于同一个父类
举例:
LineNumberReader类

public class LineNumber {
public static void main(String[] args) throws IOException {
	FileReader fr =new FileReader(".\\demo.txt");
	LineNumberReader lnr = new LineNumberReader(fr);
	String temp =null;
	lnr.setLineNumber(100);
	while((temp=lnr.readLine())!=null) {
		System.out.println(lnr.getLineNumber()+"::"+temp);
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值