您的位置:首页 > Web前端

关于BufferedReader的两个注意事项

2018-01-14 23:58 323 查看
今天做题时候遇到的一些问题,记录下来警醒自己。
第一个问题是在关闭

package com.itcast.cn;
/*1. 通过字符输出流向在项目根目录的info.txt中写入以下内容:
花有重开日,
人无再少年。
2. 通过字符输入流读取info.txt中的所有内容,每次读取一行,将每一行的第一个文字截取出来并打印在控制台上。
*/
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class Test05 {
public static void main(String[] args) throws IOException {
FileWriter fileWriter=new FileWriter("Info.txt");
BufferedWriter bufferedWriter=new BufferedWriter(fileWriter);
bufferedWriter.write("花有重开日,\r\n");

bufferedWriter.write("人无再少年。\r\n");
fileWriter.flush();
fileWriter.close();
FileReader fileReader=new FileReader("Info.txt");
BufferedReader bufferedReader=new BufferedReader(fileReader);

while((bufferedReader()!=-1)
{

System.out.println(bufferedReader.ReadLine.toCharArray()[0]);
}
bufferedReader.close();

}
}


以上代码的会导致写入文件失败,原因是在关闭io流时,可以通过关闭底层的fileReader进行关闭 但是在刷新流时,由于BufferedReader的执行顺序是从文件读入到BufferedReader/BufferedWriter的底层大小为8192字节的缓冲数组,然后再进行相关操作(包括用一个1024字节的小数组进行读写也是小数组先读写缓冲读入/写出的数据,然后大数组再对磁盘进行相关操作)故 需要刷新的是BufferedReader的流,所以需改成

package com.itcast.cn;
/*1. 通过字符输出流向在项目根目录的info.txt中写入以下内容:
花有重开日,
人无再少年。
2. 通过字符输入流读取info.txt中的所有内容,每次读取一行,将每一行的第一个文字截取出来并打印在控制台上。
*/
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class Test05 {
public static void main(String[] args) throws IOException {
FileWriter fileWriter=new FileWriter("Info.txt");
BufferedWriter bufferedWriter=new BufferedWriter(fileWriter);
bufferedWriter.write("花有重开日,\r\n");

bufferedWriter.write("人无再少年。\r\n");
BufferedWriter.flush();
fileWriter.close();
FileReader fileReader=new FileReader("Info.txt");
BufferedReader bufferedReader=new BufferedReader(fileReader);

while((bufferedReader()!=-1)
{

System.out.println(bufferedReader.readLine.toCharArray()[0]);
}
bufferedReader.close();

}
}
此时文件可以被成功写出,但是下面的程序输出结果为
有
无
变成了第二个字符,而不是所要求的第一个。原因在于当使用BufferedReader.read进行判断时会先行读入一个字符,导致接下来的ReadLine执行时从第二个字符开始。也就导致了上面的结果
正确的代码应为
 

String s=null;
while((s=(bufferedReader.readLine()))!=null)
{

System.out.println(s.toCharArray()[0]);
}

保证 readline从开始读取时就进行处理 可以获得我们想要的结果
花
人



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  IO流 Java