2012-06-03 2 views
0

iam에서 BufferedReader를 사용하여 파일에서 행을 읽습니다. 파일에서 모든 줄을 읽을 때 처음부터 파일을 다시 읽으 려 할 때 어떻게 할 수 있습니까? BufferedReader.mark()BufferedReader.reset() 작동하지 않는 properly.this 내 코드 내가 BufferedReader의 위치를 ​​재설정 할 수있는 방법BufferedReader의 위치를 ​​재설정하려면 어떻게해야합니까?

FileReader fR = new FileReader(this.sTargetPath); 
      final BufferedReader vcfBuffer = new BufferedReader(fR); 
     // vcfBuffer.mark(0); 
       Boolean nextLine = true; 
       while (nextLine) { 
        try { 
         String line = vcfBuffer.readLine(); 
         } 
        } catch (IOException e) { 
         nextLine = false; 
        } 
       } 
      } 

      vcfBuffer.reset(); 

입니까?

+3

새 버퍼링 된 판독기 객체를 다시 생성하십시오. 또는'RandomAccesFile''seek (0)'메소드를 사용하십시오. – Ronnie

+0

다른 판독기를 만드는 것 외에 다른 방법은 없습니까? 나는 이것이 좋은 생각이라고 생각하지 않는다, 그것은 효과가 있지만 효율적이지 않다? – AnasBakez

+0

나는 첫 번째 라인을 읽기 전에 마크를 만들 수 있다고 생각한다. 그런 다음 나중에 reset() 메소드를 사용하여 그 포인트로 돌아갈 수있다. – Martin

답변

1

도움을 주셔서 감사합니다는 javadoc of mark()는 말한다 : (강조 광산) :

매개 변수 :

readAheadLimit - 아직 표시가있는 경우 읽을 수있는 문자의 수에 제한. 이 제한 또는 그 이상까지 문자를 읽은 후 스트림을 재설정하려는 시도가 실패 할 수 있습니다. 한계 값 이 입력 버퍼 크기보다 크면 새 버퍼 이 할당 된 크기보다 크지 않게됩니다. 따라서 값이 큰 값을 신중히 사용해야합니다.

독자가 1 바이트 이상 읽는 즉시 인수를 0으로 호출하면 재설정이 불가능할 수 있습니다.

해결 방법은 파일 길이를 인수로 사용하여 mark 메서드를 호출하는 것입니다. 물론 메모리 내 버퍼에서 전체 파일을 읽게됩니다. 원하지 않으시면 독자를 닫고 새 BufferedReader를 다시여십시오.

관련 문제