帮朋友提问:
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)
ファイルの内容は自動的にクリアされました...しかし、ドキュメントを確認したところ、新しいファイルを使用するときにコンテンツをクリアできるとは規定されていませんでした...
に変更しますFileWriter fileWriter2 = new FileWriter(file2,true);
FileWriter
を作成し、追加をtrue