1

ファイルが EOF に達したときにデータを追加して、ファイルを再読み込みしたい。しかし、データを追加した後の 2 回目の読み取りは機能しません。

これは私のコードです

       File f = new File("sample.csv");
       byte[] bb= new byte[(int)f.length()];
      RandomAccessFile raf = new RandomAccessFile (f, "r");
      int bytesread=0;
      bytesread = raf.read(bb, 0,(int)f.length());
              //bytesread =302 or something

      raf.seek(f.length());
      Thread.sleep(4000);
      bytesread = raf.read(bb,0,2); 
    //bytesread = -1 instead of 2  
      raf.close();

私がやっていることは、最初にファイルの内容を読んでいることです。最初の読み取り中に、bytesread = 302などと言ってください。EOFへのポインタを探し、ファイルにデータを追加して再度読み取りますが、必要な結果bytesread = 2ではなく、bytesreadを-1として取得しています。私のプログラムの何が問題なのか誰か教えてもらえますか?

4

1 に答える 1

1

ほとんどのストリームでは、ファイルの最後を読み取ると、再度読み取ることはできません (RandomAccessFIle は異なる可能性がありますが、そうではないと思います)。

私がすることは、他のストリームで機能するファイルの最後まで読み取るだけですが、ファイルの最後は含めません。

例えば

int positionToRead = ...
int length = f.length();
// only read the bytes which are there.
int bytesRead = f.read(bb, 0, length - positionToRead); 

これは繰り返し動作するはずです。

于 2012-09-20T07:17:09.670 に答える