java IO流之缓冲字符流BufferedReader BufferedWriter 方法 实例 LineNumberReader加行号

本文详细介绍了Java中的缓冲字符流,包括BufferedReader和BufferedWriter的构造方法和常用方法,以及如何使用LineNumberReader追踪行号。通过示例展示了如何高效地进行字符读写,以及如何在处理文件时添加行号。
摘要由CSDN通过智能技术生成

java IO流之缓冲字符流BufferedReader BufferedWriter 方法 实例 LineNumberReader加行号

在这里插入图片描述

BufferedReader

  • 从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。 可以指定缓冲区的大小,或者可使用默认的大小。大多数情况下,默认值就足够大了。
  • 建议用 BufferedReader 包装所有其 read() 操作可能开销很高的 Reader(如 FileReader 和 InputStreamReader)。将缓冲指定文件的输入。如果没有缓冲,则每次调用 read() 或 readLine() 都会导致从文件中读取字节,并将其转换为字符后返回,而这是极其低效的。

构造方法摘要

  • BufferedReader(Reader in)
    • 创建一个使用默认大小输入缓冲区的缓冲字符输入流。
  • BufferedReader(Reader in, int sz)
    • 创建一个使用指定大小输入缓冲区的缓冲字符输入流。

方法

Modifier and Type Method Description
void close() 关闭该流并释放与之关联的所有资源。
void mark(int readAheadLimit) 标记流中的当前位置。
boolean markSupported() 判断此流是否支持 mark() 操作(它一定支持)。
int read() 读取单个字符。
int read(CharBuffer target) 将字符读入指定的字符缓冲区。
int read(char[] cbuf) 将字符读入数组。
int read(char[] cbuf, int off, int len) 将字符读入数组的某一部分。
String readLine() 读取一个文本行。
boolean ready() 判断此流是否已准备好被读取。
void reset() 将流重置到最新的标记。
long skip(long n) 跳过n个字符。返回实际跳过的字符数
  • 从类 java.lang.Object 继承的方法 clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

LineNumberReader

java.lang.Object

java.io.Reader

java.io.BufferedReader

java.io.LineNumberReader

BufferedReader直接子类

  • 跟踪行号的缓冲字符输入流。此类定义了方法 setLineNumber(int)getLineNumber(),它们可分别用于设置和获取当前行号。

    • public int getLineNumber()获得当前行号。
    • public void setLineNumber(int lineNumber) 设置当前行号。
  • 默认情况下,行编号从 0 开始。该行号随数据读取在每个行结束符处递增,并且可以通过调用 setLineNumber(int) 更改行号。但要注意的是,setLineNumber(int) 不会实际更改流中的当前位置;它只更改将由 getLineNumber() 返回的值。

  • 可认为行在遇到以下符号之一时结束:换行符(’\n’)、回车符(’\r’)、回车后紧跟换行符。

BufferedWriter

  • 将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。 可以指定缓冲区的大小,或者接受默认的大小。在大多数情况下,默认值就足够大了。
  • 该类提供了 newLine() 方法,它使用平台自己的行分隔符概念,此概念由系统属性 line.separator 定义。并非所有平台都使用新行符 (’\n’) 来终止各行。因此调用此方法来终止每个输出行要优于直接写入新行符。

  • 通常 Writer 将其输出立即发送到底层字符或字节流。除非要求提示输出,否则建议用 BufferedWriter 包装所有其 write() 操作可能开销很高的 Writer(如 FileWriters 和 OutputStreamWriters)

构造方法摘要

  • BufferedWriter(Writer out)
    • 创建一个使用默认大小输出缓冲区的缓冲字符输出流。
  • BufferedWriter(Writer out, int sz)
    • 创建一个使用给定大小输出缓冲区的新缓冲字符输出流。

方法摘要

Modifier and Type Method Description
void close() 关闭此流,但要先刷新它。
void flush() 刷新该流的缓冲。
void newLine() 写入一个行分隔符。
void write(char[] cbuf, int off, int len) 写入字符数组的某一部分。
void write(int c) 写入单个字符。
void write(String s, int off, int len) 写入字符串的某一部分。
void write(char[] cbuf) 写入字符数组cbuf
void write(String str) 写入字符串str
Write append(char c) 将指定字符c添加到此 writer。
Writer append(CharSequence csq) 将指定字符序列csq添加到此 writer。
Writer append(CharSequence csq, int start, int end) 将指定字符序列的子序列添加到此 writer。
  • 从类 java.lang.Object 继承的方法 clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

分步实现

  1. 创建源文件与目标文件实例

    //1.创建源文件与目标文件实例
    File f1 = new File("IOStream/src/testfile/test.txt");
    File f2 = new File("IOStream/src/testfile/demo.txt");
    
  2. 创建字符流对象FileReader/Writer

    //2.FileReader/Writer创建字符流对象
    FileReader fr = new FileReader(f1);
    FileWriter fw = new FileWriter(f2);
    
  3. 功能加强,在FileReader/Writer外面套一个管:BufferedReader/Writer

    //3.功能加强,在FileReader/Writer外面套一个管:BufferedReader/Writer
    BufferedReader br = new BufferedReader(fr);
    BufferedWriter bw = 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SK Primin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值