20150802-BufferedReader和BufferedWriter

本文详细介绍了Java中的IO流操作,包括BufferedReader和BufferedWriter的基本使用方法,以及如何通过它们进行文件读写操作。此外,还讲解了如何利用字节流进行文件拷贝的方法。

一、BufferedReader(读,输入流)

理解:带缓冲的流
1.FileInputStream属于InputStream
2.InputStreamReader传入的参数应该是InputStream,且InputStreamReader属于Reader类
3.BufferedReader应该传入Reader类。
4.可以写成:

BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file)));

范例:

public class Test02 {

    public static void main(String[] args) {
        /*
         * 1.读数据:Input
         * */
        File file = new File("d://456.txt");
        try {
            FileInputStream fis = new FileInputStream(file); //读字节
            InputStreamReader isr = new InputStreamReader(fis); //读字符
            BufferedReader br = new BufferedReader(isr);//读一行

            String line = br.readLine();  //产生IOException异常
            while(line!=null)
            {
                System.out.println(line);
                line = br.readLine();
            }
            br.close(); //可以值关闭br流,其他的流都会关闭
            isr.close();
            fis.close();



        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

}

注:BufferedReader中的readLine方法当读到末尾时,返回null;
读字节流时num = fis.read(byte[] arr),当读到末尾时返回的是-1.

二、BufferedWriter(写入,输出流)

/*
利用缓冲写入文字—-BufferedWriter:
1.写入一定要flush();读出不用
*/

File file1 = new File("d://a.txt");
try {
    FileOutputStream fos = new FileOutputStream(file1);
    OutputStreamWriter osw = new OutputStreamWriter(fos);
    BufferedWriter bw = new BufferedWriter(osw);
    bw.write("sjkaueiwque");   //有IOException异常
    bw.flush();
    bw.close();
    } catch (FileNotFoundException e) {

    e.printStackTrace();
    } catch (IOException e) {

    e.printStackTrace();
    }

三、拷贝文件

/*要求:将d://a.txt文件中的内容拷贝到d://12.txt
分析:
1.a.txt建立输入流,d://12.txt建立输出流
2.建字节流,循环读入a.txt中字节,并写入到d://12.txt中。flush()
注:由于存在编码问题,这里拷贝一般用字节流的方式,因为字节拷贝时不会变的。
*/

public class Test03 {

    public static void main(String[] args) {
        File files = new File("d://a.txt");
        File filec = new File("d://12.txt");


        try {
            FileInputStream fiss = new FileInputStream(files);
            FileOutputStream fosc = new FileOutputStream(filec);
            byte[] arr = new byte[1024];
            int num = fiss.read(arr);  //有IOException异常
            while(num!=-1)
            {
                fosc.write(arr, 0, num);
                num = fiss.read(arr);

            }
            fosc.flush();
            fosc.close();
            fiss.close();
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }



    }

}

解析:
1.当用BufferedWriter写入时:
bw.write();
bw.newLine(); //需要重起一行
2.这里用的字节流,不用newLine方法,因为\n也可以读出来。

### `BufferedReader` #### 特性 `BufferedReader` 是 Java 中用于读取文本的缓冲输入流,它从字符输入流中读取文本,缓冲各个字符,从而提供字符、数组行的高效读取。通过缓冲输入,可以减少对底层数据源(如文件或网络连接)的实际读取次数,提高读取效率。 #### 使用方法 `BufferedReader` 通常与其他字符输入流(如 `FileReader`)一起使用。创建 `BufferedReader` 对象时,需要传入一个 `Reader` 类型的对象。常用的方法有 `readLine()` 用于读取一行文本,`read()` 用于读取单个字符等。 #### 示例 ```java import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; public class BufferedReaderExample { public static void main(String[] args) { try (BufferedReader reader = new BufferedReader(new FileReader("file.txt"))) { String line; while ((line = reader.readLine()) != null) { System.out.println(line); } } catch (IOException e) { e.printStackTrace(); } } } ``` 在这个示例中,使用 `try-with-resources` 语句创建 `BufferedReader` 对象,这样可以自动调用 `close()` 方法,无需手动处理资源关闭问题[^1]。 ### `BufferedWriter` #### 特性 `BufferedWriter` 是 Java 中用于写入文本的缓冲输出流,它将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组字符串的高效写入。通过缓冲输出,可以减少对底层输出目标(如文件)的实际写入次数,提高写入效率。 #### 使用方法 `BufferedWriter` 通常与其他字符输出流(如 `FileWriter`)一起使用。创建 `BufferedWriter` 对象时,需要传入一个 `Writer` 类型的对象。常用的方法有 `write()` 用于写入字符、字符串或字符数组,`newLine()` 用于写入一个行分隔符。 #### 示例 ```java import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; public class BufferedWriterExample { public static void main(String[] args) { try (BufferedWriter writer = new BufferedWriter(new FileWriter("output.txt"))) { String str = "Hello, World!"; writer.write(str); writer.newLine(); writer.write("This is a test."); } catch (IOException e) { e.printStackTrace(); } } } ``` 在这个示例中,同样使用 `try-with-resources` 语句创建 `BufferedWriter` 对象,确保资源自动关闭。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值