Java中IO流-26-IO流字符流带缓冲区和相关方法

这篇我们介绍字符流读写中带缓冲区的方法,前面我们在字节流中知道了缓冲区的概念和作用。这里就直接介绍,带缓冲区读字符的方法是BufferedReader,写字符的方法是BufferedWriter.这两个方法分别传入的对象是FileReader和FileWriter。

1.API基本介绍

BufferedReader,从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。可以指定缓冲区的大小,或者可使用默认的大小。大多数情况下,默认值(8196个字符,一个字符2个字节,实际是16k)就足够大了。

BufferedWriter,将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。

2.使用带换成的字符流拷贝文件

这里还是6行核心代码的使用,看看带缓冲区的字符流文件拷贝的基本代码。

package io;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class Demo4_BufferReader {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new FileReader("xxx.txt"));
		BufferedWriter bw = new BufferedWriter(new FileWriter("yyy.txt"));
		
		int c;
		while ( (c = br.read()) != -1) {
			bw.write(c);
		}
		
		br.close();
		bw.close();
	}

}

3.BufferedReader中readLine()方法

打开API文档,可以看到readLine()的功能是读取一个文本行,返回是String对象。readLine(),实际就是根据每行结尾的换行符来进行判断这行结束(\r 或者\n)。简单来说就是,一个文件打开,可以根据换行符进行切割成多个行,这些行可以放集合或者数组中,运行一次readLine()方法,每次只读取一行字符,下面来看一个练习,我把xxx.txt文件里多写几行,方便测试。

package io;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class Demo4_BufferReader {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new FileReader("xxx.txt"));
		
		String line;
		while ( (line = br.readLine()) != null) {
			System.out.println(line);
		}
		
		br.close();
		
	}

}

运行结果参考:

Java是一门面向对象编程语言。a
第二行
第三行
第四行

4.BufferedWriter的newLine()方法

方法newLine()的作用是写入一个行分割符,其实就换行功能。

package io;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class Demo4_BufferReader {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new FileReader("xxx.txt"));
		BufferedWriter bw = new BufferedWriter(new FileWriter("yyy.txt"));
		
		String line;
		while ( (line = br.readLine()) != null) {
			bw.write(line);
			bw.newLine();
		}
		
		br.close();
		bw.close();
	}

}

这里,要提醒你,默认是读取字符流是没有读换行符,所以,写的过程也没有带上换行符,记得要手动添加newLine()方法。你可以试试注销到newLine()这行代码,运行,看看yyy.txt是不是内容就一行,没有换行效果。还有一点这个newlIne()是跨平台的,我们知道mac 和windows和linux和unix里面的换行符是有一些不一样的,但是这个方法都能在跨平台使用,不用担心换行效果。

5.LineNumberReader()方法

这个方法是根据行号去读取该行的字符流,这个类有setLineNumber和getLineNumber方法常用,默认setLineNumber是从0开始,也就是文件中行号从第一行开始计数。我们来看一个在一个记事本文件读取出来,然后前面加上行号。

package io;

import java.io.FileReader;
import java.io.IOException;
import java.io.LineNumberReader;

public class Demo4_BufferReader {

	public static void main(String[] args) throws IOException {
		LineNumberReader lnr = new LineNumberReader(new FileReader("xxx.txt"));
		
		String line;
		while ( (line = lnr.readLine()) != null) {
			System.out.println(lnr.getLineNumber() + ":" + line);
		}
		
		lnr.close();
		
	}

}

运行结果:

1:Java是一门面向对象编程语言。a
2:第二行
3:第三行
4:第四行

其实每运行一次readLine()方法,setLineNumber里面的number就自动加上一,这样打印出来才有行号显示效果。

你可能感兴趣的:(Java中IO流-26-IO流字符流带缓冲区和相关方法)