2011-08-19 4 views
0

일부 서버에 연결된 하나의 텍스트 파일을 만듭니다. 이 텍스트 파일은 서버에서 해당 내용을 수신합니다. 일부 텍스트 데이터가 계속 수신됩니다.FileReader의 readLine()을 이전 위치로 이동하는 방법

파일 크기를 제한하려면 파일의 줄을 검사하고 표시를 초과하면 파일 내용을 지우고 있습니다. 서버는 처음부터 쓸 것입니다. 다음은

내가이 작업을 수행하는 데 사용한 코드입니다 :

LineNumberReader myReader = new LineNumberReader(new FileReader(new File("mnt/sdcard/abc.txt"))); 
while(true) { 

    while(myReader.readLine() != null) { 
     counter ++; 
    } 

    if(counter > 100) { 

     PrintWriter writer = new PrintWriter("/mnt/sdcard/abc.txt"); 
        writer.print(""); 
        writer.close(); 
        writer = null; 
     counter = 0; 
    } 

} 

하지만이 파일의 내용을 삭제 한 후 내 "카운터"증가하지. 하지만 내 파일에 일부 데이터가 있습니다. 나는 독서를 한 후에 내 "myReader"를 초기 값으로 설정했다고 생각하니 ..? .readLine()이 시작될 때까지 시작되도록 설정하는 방법.

+0

myReader.reset(); –

답변

1
  • 당신은 파일에 쓰기 전에 myReader을 닫지해야?

LineNumberReader myReader = new LineNumberReader(new FileReader(new File("mnt/sdcard/abc.txt"))); 
while(true) 
{ 
    while(myReader.readLine() != null) { 
     counter++; 
    } 

    if(counter > 100) 
    { 
     //CLOSE myReader 
     myReader.close(); 
     PrintWriter writer = new PrintWriter("/mnt/sdcard/abc.txt"); 
     writer.print(""); 
     writer.close(); 
     writer = null; 
     counter = 0; 
     //REOPEN myReader 
     myReader = new LineNumberReader(new FileReader(new File("mnt/sdcard/abc.txt"))); 
    } 
} 

  • 는 서버와이 루프에 의해 수행 파일을 변경하여 수행 파일에 변경 내용이 동기화되어 있는지 확인하지 않나요?
+0

+1; 나는이 모든 과정이 효과가 없다고 생각한다. _server_가 정리 중에 파일에 쓰면 동기화되지 않습니다. – home

0

카운터가 선언 된 방법과 위치 및 다른 코드가 수정하는 방법을 표시 할 수 있습니까? 그것은 그것을 보지 않고 추측의 문제입니다. 한편, 파일 내용을 항상 읽지 않도록 고려하고 파일 크기를 사용하여 정리해야하는지 결정할 수 있습니다.

long limit= .... //add your limit in bytes 
long fileSize = new File("mnt/sdcard/abc.txt").length(); 
if (fileSize > limit){ 
    //clean the file 
} 

또한 파일을 닫거나가 열려하고 서버에 쓰기 작업을 수행하는 동안 청소하려고에 대한 다른 답변에서 언급 된 내용을 확인 할 수 있습니다.

+0

감사합니다. A.J하지만 파일 크기가 아닌 줄 수를 계산하고 싶습니다. – brig

0

내용을 지운 후에 myReader.reset()을 발행하십시오.

관련 문제