java核心技术之IO流(五)BufferedReader和BufferedWriter

x33g5p2x  于2021-03-13 发布在 Java  
字(4.1k)|赞(0)|评价(0)|浏览(411)

简单的说明

一般小的字符(char)文件的读取和写入数据,我们使用FileReader和FileWriter类就可以实现了,但是对于大的字符(char)文件的读取和写入数据,性能就会有很大的问题,我们一般选择BufferedReader和BufferedWriter来处理,也就是说BufferedReader和BufferedWriter主要的目的是提高字符(char)文件的内容读取和写入的性能。

BufferedReader和BufferedWriter

BufferedReader类

构造方法:
BufferedReader(Reader in)
创建一个有8192的字符(char)的缓存区
BufferedReader(Reader in, int size)
创建一个有size大小字符(char)的缓存区

关键方法:
read()
read(char[] buffer, int offset, int length)
readLine()——读取一行数据

常用使用方式:

BufferedReader buf = new BufferedReader(new FileReader("file.java"));

BufferedWriter类

构造方法:
BufferedWriter(Writer out)
创建一个有8192的字符(char)的缓存区
BufferedWriter(Writer out, int size)
创建一个有size大小字符(char)的缓存区

关键方法:
write(int oneChar)
write(String str, int offset, int count)
write(char[] buffer, int offset, int count)
newLine()——插入新的一行
flush()
主要是用来把缓存区的数据刷新到文件中去

常用使用方式:

BufferedWriter buf = new BufferedWriter(new FileWriter("file.java"));

一个测试的Demo

定义三个方法:
(1)testBufferedWrite方法—测试BufferedWriter
BufferedWriter的使用方法:

//1.创建一个输入字符文件   
//2.定义一个FileWriter   
//3.定义一个BufferedWriter   
//4.写的操作   
//5.关闭对应的流

(2)testBufferedReader方法—-向文件读内容
BufferedReader的使用方法:

//1.创建一个File文件   
//2.定义一个FileReader   
//3.定义一个BufferedReader   
//4.执行读的操作   
读的操作有二种方式,一各是按char来读,一种是按行来说。   
一般来说按行来读是更简单,更有效的。   
//5.关闭对应的流,可以只关闭最外面的流

(3)CopyFile方法—-复制字符文件

//1.定义输入和输出的文件   
//2.分别定义FileReader,FileWriter   
//3.分别定义BufferedReader,BufferedWriter   
//4.实现复制功能   
//5.关闭对应 的流,可以只关闭最外面的缓存流就可以
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class BufferedReaderBufferedWrite {

    //复制字符文件
    public static void CopyFile(String src,String des){
        //3.分别定义BufferedReader,BufferedWriter
        BufferedReader br = null;
        BufferedWriter bw = null;
        try {
            //1.定义二个文件
            File fsrc = new File(src);
            File fdes = new File(des);
            //2.分别定义FileReader,FileWriter
            FileReader fr = new FileReader(fsrc);
            FileWriter fw = new FileWriter(fdes);
            br = new BufferedReader(fr);
            bw = new BufferedWriter(fw);
            //4.复制操作
            char[] c = new char[2];
            int len;
            while((len = br.read(c)) != -1){
                bw.write(c, 0, len);
                bw.flush();
            }
        } catch (FileNotFoundException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }finally{
            //5.关闭对应 的流,可以只关闭最外面的缓存流就可以
            if(bw != null){
                try {
                    bw.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            if(br != null){
                try {
                    br.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    }

    //测试BufferedReader
    public static void testBufferedReader(){
        //3.定义一个BufferedReader
        BufferedReader bf = null;
        try {
            //1.定义一个文件
            File f1= new File("testBufferedWrite.txt");
            //2.定义一个FileReader
            FileReader fr = new FileReader(f1);
            bf = new BufferedReader(fr);
            //4.执行读的操作
            //方式一
//          char[] c = new char[2];
//          int len;
//          while((len = bf.read(c)) != -1){
//              System.out.print(c);
//          }
            //方式二
            String str;
            while((str = bf.readLine()) != null){
                System.out.print(str);
                System.out.println();
            }
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            //5.关闭对应的流,可以只关闭最外面的流
            if(bf != null){
                try {
                    bf.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    }

    //测试BufferedWriter
    public static void testBufferedWrite(){
        //3.定义一个BufferedWriter
        BufferedWriter bw = null;
        try {
            //1.定义一个文件
            File f1 = new File("testBufferedWrite.txt");
            //2.定义一个FileWriter
            FileWriter fw = new FileWriter(f1);
            bw = new BufferedWriter(fw);
            //4.写的操作
            String str = "测试BufferedWriter";
            bw.write(str);
            bw.newLine();
            bw.write(str);
            bw.flush();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally{
            //5.关闭对应的流
            if(bw != null){
                try {
                    bw.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
    }
}

调用:

//BufferedWriter使用样例
BufferedReaderBufferedWrite.testBufferedWrite();    
//测试BufferedReader
BufferedReaderBufferedWrite.testBufferedReader();       
//复制字符文件
BufferedReaderBufferedWrite.CopyFile("testBufferedWrite.txt", "testBufferedWrite_copy.txt");

参考资料:
1.BufferedWriterapi文档
android_sdk_docs_offline/reference/java/io/BufferedWriter.html
2.BufferedReader文档
android_sdk_docs_offline/reference/java/io/BufferedReader.html
3.BufferedOutputStream与BufferedReader视频
http://edu.csdn.net/course/detail/805/10967?auto_start=1

相关文章