1.介绍java.io.BufferedReader和java.io.BufferedWriter
(1)java.io.BufferedReader和java.io.BufferedWriter类各拥有8192字符的缓冲区。当BufferedReader在读取文本文件时,会先尽量从文件中读入字符数据并置入缓冲区,而之后若使用read()方法,会先从缓冲区中进行读取。如果缓冲区数据不足,才会再从文件中读取,使用BufferedWriter时,写入的数据并不会先输出到目的地,而是先存储至缓冲区中。如果缓冲区中的数据满了,才会一次对目的地进行写出。
(2)从标准输入流System.in中直接读取使用者输入时,使用者每输入一个字符,System.in就读取一个字符。为了能一次读取一行使用者的输入,使用了BufferedReader来对使用者输入的字符进行缓冲。readLine()方法会在读取到使用者的换行字符时,再一次将整行字符串传入。
(3)System.in是一个位流,为了转换为字符流,可使用InputStreamReader为其进行字符转换,然后再使用BufferedReader为其增加缓冲功能。例如:
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
2.读取.txt文件的指定行,并确定该行的字符数。
方法:创建两个非public类,一个输出本行内容及字符数,另一个确定文件内容的总行数。
代码如下:
import java.io.*;
import java.util.Scanner;
public class ReadFile2
{
//输出本行内容及字符数
static void readLineVarFile(String fileName, int lineNumber) throws IOException
{
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(fileName))); //使用缓冲区的方法将数据读入到缓冲区中
String line = reader.readLine(); //定义行数
if (lineNumber <= 0 || lineNumber > getTotalLines(fileName)) //确定输入的行数是否有内容
{
System.out.println("不在文件的行数范围之内。");
}
int num = 0;
while (line != null) //当行数不为空时,输出该行内容及字符数
{
if (lineNumber == ++num)
{
System.out.println("第" + lineNumber + "行: " + line+" 字符数为:"+line.length());
}
line = reader.readLine();
}
reader.close();
}
// 文件内容的总行数
static int getTotalLines(String fileName) throws IOException
{
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(fileName))); 使用缓冲区的方法将数据读入到缓冲区中
LineNumberReader reader = new LineNumberReader(br);
String s = reader.readLine(); //定义行数
int lines = 0;
while (s != null) //确定行数
{
lines++;
s = reader.readLine();
}
reader.close();
br.close();
return lines; //返回行数
}
public static void main(String[] args) throws IOException
{
String fileName = "E:/java task/zhl.txt"; // 读取文件
int totalNo = getTotalLines(fileName); // 获取文件的内容的总行数
System.out.println("本文总共有:"+totalNo+ "行");
while(true)
{
Scanner sc=new Scanner(System.in);
int lineNumber =sc.nextInt(); // 指定读取的行号
readLineVarFile("E:/java task/zhl.txt", lineNumber); //读取指定行的内容
}
}
}
结果如下: