前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >一文让你轻松理解JavaIO流之BufferedWriter

一文让你轻松理解JavaIO流之BufferedWriter

原创
作者头像
喵手
发布2023-11-15 08:54:58
发布2023-11-15 08:54:58
8973
举报
文章被收录于专栏:Java进阶实战Java进阶实战

哈喽,各位小伙伴们,你们好呀,我是喵手。

  今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。

  我是一名后端开发爱好者,工作日常接触到最多的就是Java语言啦,所以我都尽量抽业余时间把自己所学到所会的,通过文章的形式进行输出,希望以这种方式帮助到更多的初学者或者想入门的小伙伴们,同时也能对自己的技术进行沉淀,加以复盘,查缺补漏。

小伙伴们在批阅的过程中,如果觉得文章不错,欢迎点赞、收藏、关注哦。三连即是对作者我写作道路上最好的鼓励与支持!前言

  在Java开发中,我们常常需要进行文件操作,例如数据读取、写入等。而在写入数据时,使用传统的文件操作方式可能会导致性能较差、效率低下等问题。因此,Java提供了BufferedWriter类,用于提高文件写入效率。本文将介绍BufferedWriter类的使用方法、优缺点分析以及应用场景案例等内容。

摘要

  BufferedWriter类继承自Writer类,可以通过缓冲区来提高文件写入效率。BufferedWriter类提供了一个write()方法,可以将数据写入缓冲区,并且在缓冲区满或者调用flush()方法时,将缓冲区中的数据写入文件。BufferedWriter类的使用方法较为简单,可以有效提高文件写入效率。

BufferedWriter 类

简介

  BufferedWriter是Java中用于字符输出的缓冲区类,它提供了缓冲区和自动刷新功能,可以提高字符输出效率和性能。

  BufferedWriter类可以将文本写入字符输出流,将字符串、字符数组和文本文件的内容写入输出流中。在字符输出的过程中,除了提供缓冲区和自动刷新功能外,BufferedWriter还提供了一些其他的方法,例如:write()方法将指定的字符或字符串写入缓冲区;newLine()方法在缓冲区中写入一个换行符;flush()方法将缓冲区中的数据输出到字符输出流中等。

  使用BufferedWriter可以提高字符输出的效率和性能,因为它能够减少直接写入输出流的次数,从而减少了IO操作的次数,提高了程序的运行效率。

源代码解析

BufferedWriter类的构造方法如下:

代码语言:java
复制
public BufferedWriter(Writer out, int sz)

  其中,out表示要写入数据的输出流,sz表示缓冲区大小。如果sz小于或等于0,则使用默认值8192。

BufferedWriter类提供了以下方法:

  1. write(char[] cbuf, int off, int len):将字符数组cbuf中从off位置开始,长度为len的部分写入缓冲区。
  2. write(String str, int off, int len):将字符串str中从off位置开始,长度为len的部分写入缓冲区。
  3. write(int c):将字符c写入缓冲区。
  4. flush():将缓冲区中的数据写入文件。
  5. close():关闭流并释放资源。

应用场景案例

  BufferedWriter类常用于对大量数据进行写入的场景,例如将数据写入文本文件或者日志文件。以下为示例代码:

代码语言:java
复制
package com.example.javase.io.fileProject;


import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

/**
 * @Author 喵手
 * @Date 2023-10-18 21:23
 */
public class BufferedWriterTest {


    public static void testBufferedWriter_1() {
        File file = new File("testDoc.txt");
        try (BufferedWriter writer = new BufferedWriter(new FileWriter(file))) {
            for (int i = 1; i <= 10; i++) {
                writer.write("line:" + i);
                writer.newLine();  // 换行
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }


    public static void main(String[] args) {
        testBufferedWriter_1();
    }
}

如下是上述案例执行结果:

在这里插入图片描述
在这里插入图片描述

  以上代码将1至10的数字写入testDoc.txt文件中,并且每行后面会自动添加一个换行符,可以自行测试如上程序案例,已验真假性。

优缺点分析

优点

  1. 增加缓冲区可以提高文件写入效率,尤其是对于大量数据写入的场景。
  2. 可以自动处理换行符,避免手动添加。

缺点

  1. 缓冲区过小或过大都会影响文件写入效率。
  2. 写入数据时需要手动调用flush()方法或关闭流才能确保数据被写入文件中。

类代码方法介绍

以下为BufferedWriter类的常用方法介绍:

write(char[] cbuf, int off, int len)

代码语言:java
复制
public void write(char[] cbuf, int off, int len) throws IOException

将字符数组cbuf中从off位置开始,长度为len的部分写入缓冲区。

write(String str, int off, int len)

代码语言:java
复制
public void write(String str, int off, int len) throws IOException

将字符串str中从off位置开始,长度为len的部分写入缓冲区。

write(int c)

代码语言:java
复制
public void write(int c) throws IOException

将字符c写入缓冲区。

flush()

代码语言:java
复制
public void flush() throws IOException

将缓冲区中的数据写入文件。

close()

代码语言:java
复制
public void close() throws IOException

关闭流并释放资源。

测试用例

以下为针对BufferedWriter类的测试用例:

测试代码

代码语言:java
复制
    public static void testBufferedWriter_2() {
        File file = new File("testDoc.txt");
        try (BufferedWriter writer = new BufferedWriter(new FileWriter(file))) {
            writer.write("hello");
            writer.newLine();
            writer.write("world");
            writer.flush();

            //输出文件内容
            System.out.println(readFileContent(file));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private static String readFileContent(File file) throws IOException {
        StringBuilder content = new StringBuilder();
        try (BufferedReader reader = new BufferedReader(new FileReader(file))) {
            String line = null;
            while ((line = reader.readLine()) != null) {
                content.append(line);
            }
        }
        return content.toString();
    }

    public static void main(String[] args) {
        testBufferedWriter_2();
    }

  以上测试用例分别测试了BufferedWriter类的write()方法和newLine()方法,确保写入的数据与预期相符。

测试结果

如下是上述案例执行结果:

代码分析

这段代码演示了使用BufferedWriter写入文件并使用BufferedReader读取文件内容。具体而言:

  1. 首先,通过new File("testDoc.txt")创建一个新的文件对象,代表要写入的文件。
  2. try语句块中,使用BufferedWriterFileWriter创建一个字符输出流。BufferedWriter可以在数据写入时缓存一定量的数据,以减少实际的IO操作次数。
  3. 调用writer.write("hello")写入一行数据,再调用writer.newLine()写入一个换行符。然后再调用writer.write("world")写入另一行数据。
  4. 调用writer.flush()将缓存中的数据刷入文件中。
  5. 调用readFileContent(file)方法读取文件内容,该方法使用BufferedReaderFileReader创建一个字符输入流。BufferedReader可以在读取数据时进行缓存,以减少实际的IO操作次数。
  6. readFileContent方法中,使用StringBuilder保存读取的文件内容,并在循环中不断读取reader.readLine(),直到到达文件结尾为止。
  7. 最后,返回StringBuilder对象的字符串表示,即为文件的内容。
  8. main方法中,调用testBufferedWriter_2()方法,执行完整的写入和读取过程。

全文小结

  本文介绍了Java中的BufferedWriter类,包括构造方法、常用方法、优缺点分析、应用场景案例、类代码方法介绍、测试用例等内容。通过本文的学习,我们可以更加熟练地使用BufferedWriter类,提高文件写入效率,同时也了解了BufferedWriter类的优缺点,从而更好地应用于实际项目中。

总结

  BufferedWriter类是Java中常用的文件写入类,可以通过缓冲区提高文件写入效率。BufferedWriter类提供了write()、flush()、close()等方法,使用较为方便。在实际项目中,可以根据情况选择不同的缓冲区大小,以达到最佳的文件写入效率。

... ...

文末

好啦,以上就是我这期的全部内容,如果有任何疑问,欢迎下方留言哦,咱们下期见。

... ...

学习不分先后,知识不分多少;事无巨细,当以虚心求教;三人行,必有我师焉!!!

wished for you successed !!!

***

⭐️若喜欢我,就请关注我叭。

⭐️若对您有用,就请点赞叭。

⭐️若有疑问,就请评论留言告诉我叭。

我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 摘要
  • BufferedWriter 类
    • 简介
    • 源代码解析
    • 应用场景案例
    • 优缺点分析
      • 优点
      • 缺点
    • 类代码方法介绍
      • write(char[] cbuf, int off, int len)
      • write(String str, int off, int len)
      • write(int c)
      • flush()
      • close()
    • 测试用例
      • 测试代码
      • 测试结果
      • 代码分析
    • 全文小结
  • 总结
  • 文末
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档