【bufferedreader】字符输入流,以字符为单位。FileInputStream和FileOutputStream是以字节为单位。1字符=2字节。字符输入流可以解决读字节没有办法确定文档中到底有多少个字节,把读取字节转化为读取字符。
bufferedreader的read方法读取的是字符
【InputStreamReader】是从字节流到字符流的桥:它读取字节,并使用指定的charset将其解码为字符
练习一、从a.txt读取第一行
package org.zhaiyujia.pkg1;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
public class TestReadFile {
public void readFile(String filePath) {
try {
FileInputStream fis=new FileInputStream(filePath);
//byte[] b=new byte[20];
try {
BufferedReader br=new BufferedReader(new InputStreamReader(fis));
//InputStreamReader是把InputStream对象转成Reader对象的一种类。先把fis转为InputStreamReader类的对象,然后再把InputStreamReader类的对象转化为BufferedReader的对象
//这是一个固定写法,其实我们可以把所有的字节输入流转换为字符输入流
String info=br.readLine();//读取第一行,指针指向下一行
System.out.println(info);
//fis.read(b);//读取出来的字节放在字节数组b里面,它也是强制try{}catch{}的,防止出现IO异常
//System.out.println(new String(b));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (FileNotFoundException e) {//必须使用try{}catch{},因为很有可能出现找不到这个文件的异常
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String[] args) {
TestReadFile obj=new TestReadFile();
obj.readFile("f:/a.txt");
}
}
练习二、再接着输出第二行,第三行。其中代码都是重复的,我们可以用循环来做。