字符流
2.字符流
1) 编码问题
2)认识文本和文本文件
java的文本(char)是16位无符号整数,是字符的unicode编码(双字节编码)
文件是byte byte byte ...的数据序列
文本文件是文本(char)序列按照某种编码方案(utf-8,utf-16be,gbk)序列化为byte的存储结果
3)字符流(Reader Writer)---->操作的是文本文本文件
字符的处理,一次处理一个字符
字符的底层任然是基本的字节序列
字符流的基本实现
InputStreamReader 完成byte流解析为char流,按照编码解析
OutputStreamWriter 提供char流到byte流,按照编码处理
1 import java.io.FileInputStream; 2 import java.io.FileOutputStream; 3 import java.io.IOException; 4 import java.io.InputStreamReader; 5 import java.io.OutputStreamWriter; 6 7 public class IsrAndOswDemo { 8 public static void main(String[] args)throws IOException { 9 FileInputStream in = new FileInputStream("e:\\javaio\\imoocutf8.txt"); 10 InputStreamReader isr = new InputStreamReader(in,"utf-8");//默认项目的编码,操作的时候,要写文件本身的编码格式 11 12 FileOutputStream out = new FileOutputStream("e:\\javaio\\imoocutf81.txt"); 13 OutputStreamWriter osw = new OutputStreamWriter(out,"utf-8"); 14 /*int c ; 15 while((c = isr.read())!=-1){ 16 System.out.print((char)c); 17 }*/ 18 char[] buffer = new char[8*1024]; 19 int c; 20 /*批量读取,放入buffer这个字符数组,从第0个位置开始放置,最多放buffer.length个 21 返回的是读到的字符的个数 22 */ 23 while(( c = isr.read(buffer,0,buffer.length))!=-1){ 24 String s = new String(buffer,0,c); 25 System.out.print(s); 26 osw.write(buffer,0,c); 27 osw.flush(); 28 } 29 isr.close(); 30 osw.close(); 31 32 } 33 34 }
FileReader/FileWriter
1 import java.io.FileReader; 2 import java.io.FileWriter; 3 import java.io.IOException; 4 5 public class FrAndFwDemo { 6 public static void main(String[] args) throws IOException{ 7 FileReader fr = new FileReader("e:\\javaio\\imooc.txt"); 8 FileWriter fw = new FileWriter("e:\\javaio\\imooc2.txt"); 9 //FileWriter fw = new FileWriter("e:\\javaio\\imooc2.txt",true); 10 char[] buffer = new char[2056]; 11 int c ; 12 while((c = fr.read(buffer,0,buffer.length))!=-1){ 13 fw.write(buffer,0,c); 14 fw.flush(); 15 } 16 fr.close(); 17 fw.close(); 18 } 19 20 }
字符流的过滤器
BufferedReader ---->readLine 一次读一行
BufferedWriter/PrintWriter ---->写一行
1 import java.io.BufferedReader; 2 import java.io.BufferedWriter; 3 import java.io.FileInputStream; 4 import java.io.FileOutputStream; 5 import java.io.IOException; 6 import java.io.InputStreamReader; 7 import java.io.OutputStreamWriter; 8 import java.io.PrintWriter; 9 10 public class BrAndBwOrPwDemo { 11 public static void main(String[] args) throws IOException{ 12 //对文件进行读写操作 13 BufferedReader br = new BufferedReader( 14 new InputStreamReader( 15 new FileInputStream("e:\\javaio\\imooc.txt"))); 16 /*BufferedWriter bw = new BufferedWriter( 17 new OutputStreamWriter( 18 new FileOutputStream("e:\\javaio\\imooc3.txt")));*/ 19 PrintWriter pw = new PrintWriter("e:\\javaio\\imooc4.txt"); 20 //PrintWriter pw1 = new PrintWriter(outputStream,boolean autoFlush); 21 String line ; 22 while((line = br.readLine())!=null){ 23 System.out.println(line);//一次读一行,并不能识别换行 24 /*bw.write(line); 25 //单独写出换行操作 26 bw.newLine();//换行操作 27 bw.flush();*/ 28 pw.println(line); 29 pw.flush(); 30 } 31 br.close(); 32 //bw.close(); 33 pw.close(); 34 } 35 36 }