以前学习的时候也没有太在意,在项目中使用到了才发现呵呵
1.读取一个txt文件,方法很多种我使用了字符流来读取(为了方便)
FileReader fr = new FileReader("f:\\TestJava.java");
BufferedReader bf = new BufferedReader(fr);
//这里进行读取
int b;
while((b=bf.read())!=-1){
System.out.println(bf.readLine());
}
发现每行的第一个字符都没有显示出来,原因呢:b=bf.read())!=-1 每次都会先读取一个字节出来,所以后面的bf.readLine());
读取的就是每行少一个字节
所以,应该使用
String valueString = null;
while ((valueString=bf.readLine())!=null){
System.out.println(valueString);
}
public class BufferedReader extends Reader
从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。
可以指定缓冲区的大小,或者可使用默认的大小。大多数情况下,默认值就足够大了。
通常,Reader 所作的每个读取请求都会导致对底层字符或字节流进行相应的读取请求。因此,建议用 BufferedReader 包装所有其 read() 操作可能开销很高的 Reader(如 FileReader 和 InputStreamReader)。例如,
BufferedReader in = new BufferedReader(new FileReader("foo.in"));
将缓冲指定文件的输入。如果没有缓冲,则每次调用 read() 或 readLine() 都会导致从文件中读取字节,并将其转换为字符后返回,而这是极其低效的。
通过用合适的 BufferedReader 替代每个 DataInputStream,可以对将 DataInputStream 用于文字输入的程序进行本地化。
方法摘要:
void close() 关闭该流病释放与之关联的所有资源。
int read() 读取耽搁字符
String readeLine() 读取一个文本行。
构造方法详细信息
public BufferedReader(Reader in,int sz)
- 创建一个使用指定大小输入缓冲区的缓冲字符输入流。
- 参数:
in
- 一个 Readersz
- 输入缓冲区的大小- 抛出:
IllegalArgumentException
- 如果 sz <= 0-
public BufferedReader(Reader in)
- 创建一个使用默认大小输入缓冲区的缓冲字符输入流。
- 参数:
in
- 一个 Reader
方法详细信息
read
public int read() throws IOException
- 读取单个字符。
-
- 返回:
- 作为一个整数(其范围从 0 到 65535 (0x00-0xffff))读入的字符,如果已到达流末尾,则返回 -1
- 抛出:
IOException
- 如果发生 I/O 错误readLine
public String readLine() throws IOException
- 读取一个文本行。通过下列字符之一即可认为某行已终止:换行 (‘\n‘)、回车 (‘\r‘) 或回车后直接跟着换行。
-
- 返回:
- 包含该行内容的字符串,不包含任何行终止符,如果已到达流末尾,则返回 null
- 抛出:
IOException
- 如果发生 I/O 错误
- 创建一个使用默认大小输入缓冲区的缓冲字符输入流。