上节我们讲到「Java中常用流:数据流和对象流」,本节我们学习文件字符流和文件缓冲流~
文件字符流
前面介绍的文件字节流可以处理所有的文件,但是字节流不能很好的处理Unicode字符,经常会出现“乱码”现象。所以,我们处理文本文件,一般可以使用文件字符流,它以字符为单位进行操作。
【示例1】使用FileReader与FileWriter实现文本文件的copy
package com.bjsxt.io; import java.io.*; /** * 测试文件字符流 * @author 尚学 * */ public class Demo07 { public static void main(String[] args) { //写法和使用stream基本一样。只不过,读取时是读取的字符。 FileReader fr = null; FileWriter fw = null; int c = 0; try { fr = new FileReader("d:/a.txt"); fw = new FileWriter("d:/d.txt"); while((c=fr.read())!=-1){ fw.write(c); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally{ try { if(fw!=null){ fw.close(); } } catch (IOException e) { e.printStackTrace(); } try { if(fr!=null){ fr.close(); } } catch (IOException e) { e.printStackTrace(); } } } } |
字符缓冲流
BufferReader/BufferWriter增加了缓存机制,大大提高了读写文本的效率,同时,提供了方便的按行读的方法:readLine(); 处理文本时,我们一般可以使用字符缓冲流。
【示例2】使用BufferReader与BufferWriter实现文本文件的复制
import java.io.*; public class Demo08 { public static void main(String[] args) { // 注:处理文本文件时,实际开发中可以用如下写法,简单高效!! FileReader fr = null; FileWriter fw = null; BufferedReader br = null; BufferedWriter bw = null; String tempString = ""; try { fr = new FileReader("d:/a.txt"); fw = new FileWriter("d:/d.txt"); br = new BufferedReader(fr); bw = new BufferedWriter(fw); while ((tempString = br.readLine()) != null) { bw.write(tempString); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { try { if(bw!=null){ bw.close(); } } catch (IOException e1) { e1.printStackTrace(); } try { if(br!=null){ br.close(); } } catch (IOException e1) { e1.printStackTrace(); } try { if(fw!=null){ fw.close(); } } catch (IOException e) { e.printStackTrace(); } try { if(fr!=null){ fr.close(); } } catch (IOException e) { e.printStackTrace(); } } } } |
到本章节为止,我们已经学习了大部分的常见流,下节我们学习常见流的最后一篇~~
「全栈Java笔记」是一部能帮大家从零到一成长为全栈Java工程师系列笔记。笔者江湖人称 Mr. G,10年Java研发经验,曾在神州数码、航天院某所研发中心从事软件设计及研发工作,从小白逐渐做到工程师、高级工程师、架构师。精通Java平台软件开发,精通JAVAEE,熟悉各种流行开发框架。
笔记包含从浅入深的六大部分:
A-Java入门阶段
B-数据库从入门到精通
C-手刃移动前端和Web前端
D-J2EE从了解到实战
E-Java高级框架精解
F-Linux和Hadoop