2011-02-25 5 views
0

System.in을 다시 설정하여 스캐너에서 입력을 기다리는 새 스트림을 가질 수 있습니까? 이 프로그램은 한 번 실행하면System.in 및 스트림에 대한 질문

boolean run = true; 
    String commandLine = ""; 
    Scanner keyboard; 

    Tokenizer arguments; 
    RecursiveDescentParser parse; 

    while (run){ 
     // Command prompt 
     System.out.print(" ==>\t"); 

     keyboard = new Scanner(System.in); 

     while (keyboard.hasNextLine()) { 
       commandLine += " " + keyboard.nextLine(); 
     } 

     keyboard.close(); 

     keyboard = null; 

     System.setIn (new FileInputStream (FileDescriptor.in) ) ; 

     System.setIn(System.in); 

     keyboard = new Scanner(System.in); 

     arguments = new Tokenizer(commandLine); 
     commandLine = ""; 
     parse = new RecursiveDescentParser(arguments, false); 
     run = parse.parseStartSymbol(); 
    }   
} 

, hasNextLine은() 나는이 문제를 해결 어떻게 질문을하라는 메시지가 무기한 false를 반환합니다 : 여기 내 코드는? 스트림을 어떻게 든 재설정 할 수 있습니까? 도와 줘서 고마워.

답변

3

난 당신이 찾고있는 생각 :

InputStream originalInput = System.in; 
System.setIn(new FileInputStream(FileDescriptor.in)); 
// Do stuff 
System.setIn(originalInput); 

그러나, 그것은 System.in을 교체하고 단지 코드의 나머지 부분과 함께 일할 수있는 입력 스트림을 만들기 위해 결코 좋은 생각이 없을 것이다.

+0

내 코드의 나머지 부분을 입력 스트림으로 사용하여 작업의 의미를 조금 더 자세하게 설명해 주실 수 있습니까? – user633658

+0

@ user633658 : 글쎄, System.in의 특별한 점은 무엇입니까? 재설정이 필요하다면 다른 곳에서 사용하고있는 것입니다. 이 코드는 System.in을 사용한다는 것을 * 알아야합니까? System.in을 생성자에 대한 인수로 전달할 수 없습니까? –

+0

문제는 코드 에서처럼 콘솔에서 데이터를 읽을 수 있거나 scanner를 사용하여 한 번만 리디렉션 할 수 있으며 system.in 문제 때문에 hasNextLine()은 무한대로 false를 반환합니다. – user633658

관련 문제