Java IO流(一) 字符流

IO流用来处理设备间的数据传输,分为字节流和字符流(融合了编码表,处理常见的文本数据)。

常用基本类之字符流类:Reader:Writer

1.FileWriter和FileReader

这两个类是字符流类的子类,可以实现文本的写入和读取,查阅API也可以看出,这两个类很简单。

写入:

FileWriter fw = new FileWriter("/Volumes/Function/G/demo.txt");//创建文本文件
fw.write("abc");//写入流中
fw.flush();//将数据刷新到文本中,如果不刷,则不会写入文本中
fw.close();//关闭之前会刷新一次内部缓冲,将数据刷到目的地中,flush刷新会继续使用。
其中,flush()和close()方法的区别在于,flush仅仅刷新了缓冲,并没有关闭流,在刷新后可以继续写入,而close则是在关闭之前刷新一次缓冲区,之后就不能再写入。

读取:

FileReader fr = new FileReader("/Volumes/Function/G/demo.txt");
// 一次读一个字符
int ch = 0;
while((ch = fr.read()) != -1){
	System.out.println((char)ch);
}
//循环读取数据
char[] chr  = new char[1024];
int number = 0;
while((number = fr.read(chr)) != -1){
	System.out.println(number + "*******"+new String(chr,0,number));
}
fr.close();
复制文本:

(1)边读边复制,速度较慢

FileWriter fw = new FileWriter("/Volumes/Function/G/demo_copy.txt");//创建复制后的文本
FileReader fr = new FileReader("/Volumes/Function/G/demo.txt");//读取要复制的文本
int ch = 0;
while ((ch = fr.read()) != -1) {
	fw.write(ch);
}
fw.close();
fr.close();
(2)先读取,临时存储,然后写入
FileWriter fw = null;
FileReader fr = null;
try {
	fw = new FileWriter("/Volumes/Function/G/demo_copy1.txt");
	fr = new FileReader("/Volumes/Function/G/demo.txt");
	char[] ch = new char[1024];
	int len = 0;
	while ((len = fr.read(ch)) != -1) {
		fw.write(ch, 0, len);
	}
} catch (IOException e) {
	// TODO Auto-generated catch block
	e.printStackTrace();
} finally {
	if (fr != null) {
		try {
			fr.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	if (fw != null) {
		try {
			fw.close();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	
	}
}
2.BufferedWriter和BufferedReader

字符串的缓冲区,提高对数据的读写效率,需要结合流来使用,所以在创建缓冲区前必须有流对象。与FileWriter和FileReader类似。

写入:

FileWriter fw = new FileWriter("/Volumes/Function/G/demo_test.txt");
BufferedWriter bufw = new BufferedWriter(fw);//将流对象传递给BufferedWriter方法即可利用缓冲区函数方法进行读写
bufw.write("abcd");
bufw.newLine();
bufw.write("dajhd");
bufw.flush();
bufw.close();
读取:
FileReader fr  = new FileReader("/Volumes/Function/G/demo_test.txt");
BufferedReader bufr = new BufferedReader(fr);
String s = "";
while((s = bufr.readLine()) != null){
	System.out.println(s);
}
bufr.close();
复制:与FileWriter、FileReader类似。

3.LineNumberReader

这一子类新增了两个方法,getLineNumber()和setLineNumber(),对于读取和写入方法还是一样的。

FileReader fr  = new FileReader("/Volumes/Function/G/demo_test.txt");
LineNumberReader lnr = new LineNumberReader(fr);
String line  = null;
while((line = lnr.readLine()) != null){
	System.out.println(lnr.getLineNumber() + ":" + line);
}
lnr.close();
效果如下:









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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值