2010-05-03 8 views
6

일부 로그 파일을 꼬리/구문 분석하려고합니다. 날짜로 시작하는 항목은 여러 행으로 확장 될 수 있습니다.Java 스캐너가 파일을 따르지 않습니다

이 방법은 작동하지만 새로운 파일을 볼 수는 없습니다.

File inputFile = new File("C:/test.txt"); 
InputStream is = new FileInputStream(inputFile); 
InputStream bis = new BufferedInputStream(is); 
//bis.skip(inputFile.length()); 
Scanner src = new Scanner(bis); 
src.useDelimiter("\n2010-05-01 "); 

while (true) { 
    while(src.hasNext()){ 
    System.out.println("[ " + src.next() + " ]"); 
    } 
} 

)는 (스캐너의 다음() 또는 hasNext처럼 보일 파일에 새 항목을 감지하지 않습니다.

내가 어떻게 구현할 수 있는지, 기본적으로 사용자 정의 구분 기호가있는 꼬리 -f가 있습니다.


확인 - 내가 스캐너를 새로 고침 &을 확인하고있어 켈리의 조언을 사용하여이 작동합니다. 고맙습니다 !!

누군가에게 개선 제안이있는 경우 plz do!

File inputFile = new File("C:/test.txt"); 
InputStream is = new FileInputStream(inputFile); 
InputStream bis = new BufferedInputStream(is); 
//bis.skip(inputFile.length()); 
Scanner src = new Scanner(bis); 
src.useDelimiter("\n2010-05-01 "); 

while (true) { 
    while(src.hasNext()){ 
    System.out.println("[ " + src.next() + " ]"); 
    } 

    Thread.sleep(50); 
    if(bis.available() > 0){ 
    src = new Scanner(bis); 
    src.useDelimiter("\n2010-05-01 "); 
    } 
} 
+0

지금은 어떤 일이 발생합니까? 예외가 발생하거나 새로운 데이터를 감지하지 않고 무한 루프에 걸립니까? –

+0

새로운 데이터를 감지하지 않고 무한 루프. 그것을 여러 가지 방법으로 시도해 보았습니다. hasNext() first, buffered/unbuffered .. –

답변

1

나는 스캐너가 버퍼링 bis를 분석되지만 버퍼가 결코 새로 고쳐지고 있지 않은지 생각합니다. BufferedInputStream 또는 Scanner를 사용하여 스트림에서 바이트를 계속 읽지 만 직접 처리해야합니다. javadocs의 가입일

:

BufferedInputStream을는 스트림 즉, 능력이 입력 버퍼링하고 마크 리셋 방법을 지원하기 위해 다른 입력 기능을 추가한다. BufferedInputStream이 만들어지면 내부 버퍼 배열이 만들어집니다. 스트림에서 바이트를 읽거나 을 건너 뛰므로 에있는 많은 바이트가 포함 된 입력 스트림이 포함 된 에서 필요에 따라 내부 버퍼가 다시 채워집니다. 마크 동작은 입력 스트림에 점을 기억하고 재설정 작업은 새로운 바이트가 포함 입력 스트림에서 촬영하기 전에 가장 최근의 마크 조작 이후에 읽은 모든 바이트 가 다시 읽되도록합니다.

+0

이 동의했습니다. 업데이트 된 수정 된 게시물 고마워! –

관련 문제