2010-11-30 2 views
-3

Scanner + System.in 파일을 읽었습니다. 파일의 끝에 도달했을 때 내가 그만 읽을 수있는 방법 ..스캐너 + 시스템 정지 조건

Scanner input = new Scanner(System.in); 

    while (input.hasNextLine()) 
    { 
     String log_line = input.nextLine(); 
    } 

질문한다 : 나는 같은 입력을 읽고 있어요

cat -A test.txt | java -jar test.jar 

: 리눅스에서 내 명령처럼 보인다?

+0

이 글을 게시 한 후 4 년 동안 물어 본 질문의 중복을 어떻게 확인할 수 있는지 잘 모르겠습니다. –

+1

@MeghanArmes 중복으로 투표를 종료 할 때는 시간이 중요하지 않습니다. Google은 더 나은 게시를 선호합니다. –

+0

@Jarrod는 닫힌 질문의 사본으로 질문을 닫는 것이 일반적으로 좋은 생각이 아닙니다. 새로운 대답을 얻는 방법을 막습니다. 다시 열어주세요. –

답변

2

것 같다 그 문제가 -A 옵션이 아닌 자바 코드 (이 일반 파일에 제대로 작동이)입니다 :

$ echo -e "foo\nbar" | java -jar Test.jar 
foo 
bar 
$ 

어쩌면 TEST.TXT 일부 인쇄 할 수없는 문자가 포함 된 스캐너는 할 수 없습니다 핸들 ...

+0

test.txt는 다른 프로그램에서 생성 된 파일이며 모든 문자는 괜찮아 보입니다. 에코는 무엇을 의미합니까? Echo는 파일의 내용을 표시하지 않습니까? 이전에는 꼬리 명령을 사용했고 거기에 멈출 조건이있는 probalem이있었습니다. 나는 그렇게 생각합니다. – Serhiy

+0

편의를 위해 echo를 사용했습니다. (예, echo -e와 같은 것) 1 \ n2 \ n3 "> test.txt | tail -n 2 test.txt | java -jar dist/Test.jar 그건 그렇고, 터미널 에뮬레이터는 어떤 용도로 사용합니까? –

+0

Omg, 나는 정말로 어리 석거나 정말로 피곤합니다. 내가 가지고있는 또 하나의 스레드는 멈추지 않았으므로 프로그램이 종료되지 않습니다. 많은 도움을 얻으실 수 있습니다. – Serhiy

3

문제는 System.in이 결코 "종료"되지 않습니다. 즉, EOF가 스트림으로 전송되지 않으므로 마지막 줄 이후에 hasNextLine()이 더 많은 데이터를 기다리는 동안 차단됩니다.

해결책은 FileInputStream(filePath)을 열고 스캐너 생성자에서 사용하는 것보다 파일 이름을 앱에 전달하는 것입니다.

+0

이상하게도, 저에게 맞습니다. (단지 Serhiy의 코드를 붙여 넣고 stdout에 echo하는 줄을 추가했습니다) :) –

+0

Myabe에 스캐너의 대안이 있습니까? 내가 args를 통해 fileneame을 전달하고 싶지 않았어. – Serhiy

+0

나는 당신의 솔루션 (더 낫다/더 안전하다)을 주장하지 않고 단지 궁금하다. http://img13.imageshack.us/img13/3706/scanner.png –