帮朋友提问:
File file1 = new File("D:\\a.txt");
File file2 = new File("D:\\a.txt");
FileWriter fileWriter2 = new FileWriter(file2);
FileReader fileReader = new FileReader(file1);
BufferedReader bufferedReader = new BufferedReader(fileReader);
BufferedWriter bufferedWriter2 = new BufferedWriter(fileWriter2);
String length = null;
while((length=bufferedReader.readLine())!=null) {
System.out.println(length);
bufferedWriter2.write(length);
}
fileReader.close();
bufferedWriter2.close();
这段代码为什么读到的length都是null?
我个人觉得是因为file1和file2同时打开a.txt,会出现读写冲突,导致都出来的都是null,不知大家怎么看?
Java IO是基于字节流来操作的,当然字符流在底层也是通过字节流来完成的,其中有一个隐含的指针来表示当前读取或者写入的位置。
@iMouseWu 是对的,因为
FileOutputStream
对象被创建时会执行一个native
的open()
操作,如果没有指定append
属性为true
,则指针会移动到文件开始的位置,相当于清空了文件操作。当然题主使用的
FileWiter
也是通过FileOutputStream
来实现的。另外需要读写同时操作文件,建议采用
RandomAccessFile
。我测试了一下
new FileWriter(file2)
自动清空了文件内容...但是查了一下文档没规定new的时候可以把内容全清空掉....
FileWriter fileWriter2 = new FileWriter(file2,true);
创建
FileWriter
改append为true