字符流:
Java的文本(char)是16位无符号整数,是字符的unicode编码(双字节编码)。
文本是byte byte byte的数据序列。
文本文件是文本(char)序列按照某种编码方案(UTF-8,UTF-16BE,GBK)序列化为byte的存储结果。
字符流(Reader Writer)操作的是文本文件。
字符的处理:一次处理一个字符,字符的底层依然是基本的字节序列。
字符流的基本实现:
InputStreamReader完成byte流解析为char流,按照编码解析。
OutputStreamWriter提供char流到byte流,按照编码处理。
也可以用FileReader FileWriter。 BufferedReader BufferedWriter PrintWriter进行读写。
不同于字节流,字符流面对的是字符,操作的是字符数组,返回的也是字符char,但无论是方法 还是参数 和字节流都大同小异,它们本质是一样的。
如果读写二进制文件,mp3 jpg等尽量使用BufferInputStream BufferOutputStream
如果读写文本文件,尽量使用BufferReader PrintWriter.
package com.zhao.charStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStreamReader; /** * InputStreamReader and OutputStreamWriter Demo * * @author admin * */ public class IsrAndOswDemo { public static void main(String[] args) throws IOException { // File file = new File("D:" + File.separator + "wang.txt"); File file=new File("demo/wang.txt"); FileInputStream fileInputStream = new FileInputStream(file); InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream); int c; while ((c = inputStreamReader.read()) != -1) { System.out.print((char) c); } System.out.println(); char[] chars = new char[8 * 1024]; // inputStreamReader.read(chars, 0, chars.length); // String str = new String(chars, 0, chars.length); // System.out.print(str); inputStreamReader.close(); fileInputStream.close(); } }
package com.zhao.charStream; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; /** * FileReader and FileWriter Demo * @author admin * */ public class FrAndFwDemo { public static void main(String[] args) throws IOException { FileReader fileReader=new FileReader("D:/wang.txt"); FileWriter fileWriter=new FileWriter("D:/zhao.txt",true); char[] cbuf=new char[8*1024]; fileReader.read(cbuf,0,cbuf.length); fileWriter.write(cbuf, 0, cbuf.length); fileWriter.flush(); fileReader.close(); fileWriter.close(); } }
package com.zhao.charStream; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; /** * BufferedReader and BufferedWriter or PrintWriter Demo * @author admin * */ public class BrAndBwOrPwDemo { public static void main(String[] args) throws IOException { //对文件进行读写操作 FileReader in=new FileReader("D:/wang.txt"); BufferedReader bufferedReader=new BufferedReader(in); FileWriter out=new FileWriter("D:/zhao.txt"); // BufferedWriter bufferedWriter=new BufferedWriter(out); PrintWriter printWriter=new PrintWriter(out); String str; while((str=bufferedReader.readLine())!=null){ System.out.print(str); //一次读一行,并不识别换行 // bufferedWriter.write(str); // //单独写出换行操作 // bufferedWriter.newLine(); // bufferedWriter.flush(); printWriter.println(str); } bufferedReader.close(); printWriter.close(); // bufferedWriter.close(); } }