上节我们讲到「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