java(I/O流四---字符流)

字符流

1)编码问题

2)认识文本 文件 文本文件

文本(char):是16位无符号的整数,是字符的unicode编码(双字节编码)


文件:文件时byte byte byte....的数据序列

文本文件:是文本(char)序列按照某种的编码方案序列化byte byte byae的存储数据序列

3)字符流分为输出流(Writer)和输入流(Reader)

字符的处理:一次处理一个字符,字符的底层依然是基本的字节序列

字符流的基本实现

InputStreamReader 完成byte流解析为char流,按照编码解析

OutputStreamWriter提供char流到byte流,按照编码处理

package com.tudou.io;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class Reader {

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		FileInputStream in = new FileInputStream("D:\\eclipse\\1.txt");
		InputStreamReader isr = new InputStreamReader(in,"gbk");
		
		FileOutputStream out = new FileOutputStream("D:\\eclipse\\2.txt");
		OutputStreamWriter osw = new OutputStreamWriter(out,"gbk");
		int c;
		int i=1;
//		while((c=isr.read())!=-1){
//			System.out.print((char)c+" ");
//			
//			if(i++%10==0){
//				System.out.println();
//			}
//		}
		//批量读取,放入buffer这个字符数组,从第0个位置开始放置
		//最多放置buffer.length个返回的是读到的字符的个数
		char[] buffer = new char[8*1024];
		while((c=isr.read(buffer,0,buffer.length))!=-1){
			String s = new String(buffer,0,c);
			System.out.println(s);
			osw.write(buffer,0,c);
			osw.flush();
		}
		in.close();
		isr.close();
		out.close();
		osw.close();
		
	}

}

FileReader/FilePrinter

package com.tudou.io;

import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class FileRP {

	public static void main(String[] args) throws IOException {
		// TODO Auto-generated method stub
		FileReader fr = new FileReader("D:\\eclipse\\1.txt");
		FileWriter fw = new FileWriter("D:\\eclipse\\3.txt",true);//追加内容true
		char[] buffer = new char[2*1024];
		int c;
		while((c=fr.read(buffer,0,buffer.length))!=-1){
			fw.write(buffer,0,c);
			fw.flush();
		}
		fr.close();
		fw.close();
	}

}

字符流的过滤器

BufferedReader------->readLine一次读一行

BufferedWriter/PrintWriter----->写一行

package com.tudou.io;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;

public class BufferedRW  {
	//对文件进行读写操作
	public static void main(String[] args)throws IOException{
		FileInputStream in  = new FileInputStream("d:\\eclipse\\1.txt");
		InputStreamReader isr = new InputStreamReader(in);
		BufferedReader br = new BufferedReader(isr);
//		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter
//				( new FileOutputStream("d:\\eclipse\\5.txt")));
		PrintWriter pw = new PrintWriter("d:\\eclipse\\6.txt");
		
		String line;
		while((line=br.readLine())!=null){
			System.out.print(line);//一次读一行并不能识别换行符
//			bw.write(line);
//			bw.newLine();//换行操作
//			bw.flush();
			pw.print(line);
			pw.flush();
		}
		br.close();
		pw.close();
	}
	
}



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值