ホームページ  >  に質問  >  本文

java bufferedReader 读出来为什么都是空的?

帮朋友提问:

        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,不知大家怎么看?

PHP中文网PHP中文网2741日前434

全員に返信(3)返信します

  • 大家讲道理

    大家讲道理2017-04-18 09:38:10

    Java IO は バイト ストリーム に基づいて動作します。 もちろん、文字ストリームも最下層のバイト ストリームを通じて完成します。現在のものを表す暗黙的な ポインター があります。読み取りまたは書き込みの場所。

    @iMouseWu は正しいです。FileOutputStream オブジェクトが作成されると、native open() 操作が実行されます。append 属性が true として指定されていない場合、ポインターは に移動します。ファイルの先頭。これはファイル操作をクリアするのと同じです。

    もちろん、サブジェクトによって使用される FileWiterFileOutputStream を通じて実装されます。

    リーリー

    また、ファイルの読み取りと書き込みを同時に行う必要がある場合は、RandomAccessFile を使用することをお勧めします。

    返事
    0
  • 巴扎黑

    巴扎黑2017-04-18 09:38:10

    テストしてみたところ、new FileWriter(file2) ファイルの内容は自動的にクリアされました...
    しかし、ドキュメントを確認したところ、新しいファイルを使用するときにコンテンツをクリアできるとは規定されていませんでした...

    返事
    0
  • 迷茫

    迷茫2017-04-18 09:38:10

    FileWriter fileWriter2 = new FileWriter(file2,true);
    FileWriter を作成し、追加を true

    に変更します

    返事
    0
  • キャンセル返事