关于BufferedReader的两个注意事项
2018-01-14 23:58
323 查看
今天做题时候遇到的一些问题,记录下来警醒自己。
第一个问题是在关闭
以上代码的会导致写入文件失败,原因是在关闭io流时,可以通过关闭底层的fileReader进行关闭 但是在刷新流时,由于BufferedReader的执行顺序是从文件读入到BufferedReader/BufferedWriter的底层大小为8192字节的缓冲数组,然后再进行相关操作(包括用一个1024字节的小数组进行读写也是小数组先读写缓冲读入/写出的数据,然后大数组再对磁盘进行相关操作)故 需要刷新的是BufferedReader的流,所以需改成
正确的代码应为
保证 readline从开始读取时就进行处理 可以获得我们想要的结果
第一个问题是在关闭
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从开始读取时就进行处理 可以获得我们想要的结果
花 人
相关文章推荐
- 关于java中bufferedreader的一些注意事项
- 泛型编程使用gcc编译器时的两个注意事项:关于typename和迭代器
- 关于java中BufferedReader的read()及readLine()方法的使用注意
- BufferedReader.rean(buffer)注意事项
- 关于spring配置两个sessionFactory的配置与注意事项
- BufferedReader.mark()函数注意事项
- 关于java中BufferedReader的read()及readLine()方法的使用注意
- BufferedReader的使用方法和注意事项
- 关于apicloud开发注意事项
- 关于在浏览器中测试cordova plugin的注意事项。
- 关于Trojan.DL.Win32.Autorun类病毒的杀毒操作注意事项
- 关于Unicode和URL encoding入门的一切以及注意事项
- 关于使用百度地图的IOS SDK 的注意事项
- 关于hadoop reduce阶段遍历Iterable的注意事项
- 关于BufferedReader的read问题
- Android 平台上蓝牙开发的关于 UUID 设置的注意事项
- 关于block使用的5点注意事项
- 关于SQLServer的若干注意事项
- 关于cookie的设置使用注意事项(时间,路径)
- 关于js数据类型注意事项