2010-11-20 3 views
7

내 프로그램에서 여러 Scanner 개체를 사용하는 올바른 방법은 무엇입니까? 예를 들어, scanner를 사용하여 파일을 읽은 다음 파일에있는 내용에 따라 scanner를 다시 사용하여 사용자 입력을 요구합니다. 내 코드의 일부가 표시됩니다.System.in에서 여러 Scanner 개체를 사용하는 방법?

.... 
Scanner f = new Scanner (System.in); //get the file name 
String fileName = f.next(); 
Scanner input = new Scanner(new File(fileName)); 
while (input.hasNext()) 
{ 
    String currentLine = input.nextLine(); 
    if (some pattern found) { 
     Scanner getUserInput = new Scanner (System.in); 
     String userInput = getUserInput.next(); 
     ..... 
    } 
} 
.... 

작동하지 않는 것 같습니다. userInput.close()을 사용해야합니까? 내가 도대체 ​​뭘 잘못하고있는 겁니까. ? 첫 번째 System.in 그냥 파일 이름을 받고있다 내가 이해하지 못하는

. 그 후, 왜 두 번째 System.in을 방해합니까? input 개체에 대한 으로, 그 파일의 읽기 및하지 System.in에서.

답변

11

내가 뭘 잘못하고 있니? 동일한 스트림에 다수의 스캐너를 사용

근본적인 문제이다. 스캐너는 스트림을 소비 할 수 있으며, 예상되는 부작용을 유발할 수 있습니다. 그것을하지 않는 것이 좋습니다.

입력이 닫히면 모든 사람을 위해 입력 (하지만 문자열에는 close 메서드가 없음)이 닫힙니다. 그게 누구에게도 재미 있지 않습니다.

편집 : 여러 스캐너가 나쁜 이유에 "세부 사항": Do not create multiple buffered wrappers on an InputStream

... 버퍼 된 래퍼가 안전하지 않은; 이 조건은 스캐너가 대신 사용되는 경우에도 악용 될 수 있습니다.

참고 : Java code question ... scanner related? 또한 몇 가지 접근 방법에 대해 설명합니다.

+0

깨진 링크가 있어야합니다> -> https://www.securecoding.cert.org/confluence/display/java/FIO06-J.+Do+not+create+multiple+buffered+wrappers+on+ a + 단일 + 바이트 + 또는 + 문자 + 스트림 – iX3

관련 문제