一、基本内容
在JDK1.5之前,BufferedReader是一个非常重要的数据读取的操作类,如果要进行输入流的操作,尤其是文件操作,都建议使用BufferedReader类使用。
BufferedReader类属于Reader的子类,负责进行缓冲区的读取,由于其本身属于字符输入流,所以更加适合输入中文文字信息。
二、BufferedReader类的继承结构图:
在BufferedReader类中提供有两个重要的方法
- 构造方法:
public BufferedReader(Reader in);
- 数据读取方法:
public String readLine() throws IOException
(非常重要的方法)
范例:BufferedReader实现数据的输入。
分析:
数据输入要使用System.in,而System.in是InputStream类型。
BufferedReader类的构造需要接收Reader类型,那么需要将字节输入流变为字符输入流,使用InputStreamReader
package lisy;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
public class CopyDemo {
public static void main(String[] args) throws Exception {
BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));
System.out.println("请输入信息: ");
String str = buf.readLine();
System.out.println("输入信息为: "+str);
}
}
以上的代码已经成功的实现了键盘输入数据,并且也可以直接按照字符串返回,不过这种实例化对象进行中的操作是不可取的。
先在有了BufferedReade类对象,那么之后就可以进行一些输入验证的操作了。
比如说:要求输入年龄,如果输入的不是数字,则提示错误。
package lisy;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
public class CopyDemo {
public static void main(String[] args) throws Exception {
BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));
boolean flag = true;
while(flag) {
System.out.println("请输入年龄: ");
String str = buf.readLine();
if(str.matches("\\d+")) {
System.out.println("输入年龄为: "+Integer.parseInt(str));
flag = false;
}else {
System.out.println("请输入正确的年龄信息。");
}
}
}
}
以上的两个范例都是围绕着键盘输入数据的操作进行的,不过使用BufferedReader类还有一个好处是可以进行大文本的读取。
范例:利用BufferedReader读取文件的信息。
package lisy;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
public class CopyDemo {
public static void main(String[] args) throws Exception {
BufferedReader buf = new BufferedReader(new FileReader(new File("E:" + File.separator + "my.txt" )));
String string = null;
while((string = buf.readLine()) != null) {
System.out.println(string);
}
buf.close();
}
}
虽然BufferedReader 类比较好用,但是在输入数据的时候已经不是首选了。而是次要的选择。