帮朋友提问:
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,不知大家怎么看?
大家讲道理2017-04-18 09:38:10
Java IO는 바이트 스트림을 기반으로 작동합니다. 물론 하위 계층에는 바이트 스트림을 통해 현재를 나타내는 암시적 포인터가 있습니다. 읽거나 쓸 위치입니다.
@iMouseWu가 맞습니다. FileOutputStream
객체가 생성되면 native
open()
작업을 수행하기 때문입니다. append
속성이 true
으로 지정되지 않으면 포인터가 파일 작업을 지우는 것과 같습니다.
물론 주어가 사용하는 FileWiter
도 FileOutputStream
를 통해 구현됩니다.
또한, 파일 읽기와 쓰기를 동시에 해야 한다면 RandomAccessFile
을 사용하는 것이 좋습니다.
巴扎黑2017-04-18 09:38:10
테스트해봤는데new FileWriter(file2)
파일 내용이 자동으로 지워졌네요...
그런데 문서를 확인해 보니 새것을 사용하면 내용을 지울 수 있다고 명시되어 있지 않네요....
迷茫2017-04-18 09:38:10
FileWriter fileWriter2 = new FileWriter(file2,true);
FileWriter
을 만들고 true