2012-09-20 4 views
1

EOF에 도달하면 파일에 데이터를 추가하여 파일을 다시 읽으려고합니다. 그러나 데이터를 추가 한 후 두 번째로 읽은 것은 작동하지 않습니다.임의 액세스를 사용하여 파일 다시 읽기

이 무엇 내가 뭘하면 처음에 내가 처음 읽기 동안, 내 bytesread = 302 또는 뭔가를 파일의 내용을 말 읽고 있어요 내 코드

 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(); 

입니다. 이제 EOF에 대한 포인터를 찾고 파일에 데이터를 추가하고 다시 읽지 만 원하는 결과 bytesread = 2 대신 bytesread를 -1로 가져옵니다. 아무도 내 프로그램과 함께 prob 무엇인지 말해 줄래? 이 파일의 끝을 읽을 일단

답변

1

대부분의 스트림의 경우, 다시 읽을 수 없습니다

내가 어떻게 할 것인지 만까지 읽을 수 있지만 포함되지 않는 (RandomAccessFile에 다를 수 있습니다하지만 난 아니 의심) 파일의 끝. 다른 스트림에서 작동합니다.

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

이것은 반복해서 작동해야합니다.

+0

파인 피터, 데이터를 추가하면 EOF 이후 파일을 읽을 수있는 다른 방법은 없지만 요점은 있습니까? –

+0

RandomAccessFile을 사용하면 의미가 있지만 그게 무엇인지는 알 수 없습니다. Javadocs에서 파일 끝을 "재설정"할 수있는 방법이 있는지 확인합니다. 아마도 seek()를 호출하면됩니다. ?? –

+0

EOF를 재설정 할 수있는 방법이 없는지 확인했습니다. 예 seek()은 파일 포인터 오프셋 만 설정합니다. –

관련 문제