一、前提
文件字节流可以处理所有的文件,但是字节流不能很好的处理Unicode字符,经常会出现“乱码”现象。所以,我们处理文本文件,一般可以使用文件字符流,它以字符为单位进行操作。
二、FileReader
与FileInputStream类似,只需将名字换掉即可
1 import java.io.*; 2 3 public class TestIO05 { 4 public static void main(String[] args) { 5 //创建流 6 File file = new File("b.txt"); 7 //选择流 8 Reader reader = null; 9 try { 10 reader = new FileReader(file); 11 //操作流(分段读取),提高读取效率 12 char[] flush = new char[1024]; 13 int len = -1; //接收长度 14 while ((len = reader.read(flush)) != -1){ 15 //解码操作,字符数组-->字符串 16 String str = new String(flush,0,len); 17 System.out.println(str); 18 } 19 } catch (IOException e) { 20 e.printStackTrace(); 21 }finally { 22 //关闭流 23 if(reader!=null){ 24 try { 25 reader.close(); 26 } catch (IOException e) { 27 e.printStackTrace(); 28 } 29 } 30 } 31 } 32 }
二、FileWriter
1 import java.io.*; 2 3 public class TestIO06 { 4 public static void main(String[] args) { 5 //创建源 6 File src = new File("abc.txt"); 7 //选择流 8 Writer writer = null; 9 try { 10 writer = new FileWriter(src); 11 //操作流(写出) 12 //写法一 13 /*String msg = "IO is so esay 哈哈哈"; 14 char[] datas = msg.toCharArray(); //字符串-->字符数组(编码) 15 writer.write(datas,0,datas.length);*/ 16 17 //写法二(实际上字符串就是字符数组,不需要处理它,直接丢进去就行) 18 /*String msg = "IO is so esay 哈哈哈"; 19 writer.write(msg);*/ 20 21 //写法三(append方法,更加简单) 22 writer.append("IO is so esay ").append("哈哈哈"); 23 writer.flush(); //刷新此输出流并强制任何缓冲的输出字节被写出,细节 24 } catch (FileNotFoundException ex) { 25 ex.printStackTrace(); 26 } catch (IOException e) { 27 e.printStackTrace(); 28 } finally { 29 //释放资源 30 if(writer!=null){ 31 try { 32 writer.close(); 33 } catch (IOException e) { 34 e.printStackTrace(); 35 } 36 } 37 } 38 } 39 40 }