System.in
에서 무언가를 읽는 간단한 방법 readIn()
을 만들려고합니다. Eclipse에서 실행할 때 System.console()
이 null을 반환하기 때문에 Console을 사용할 수 없습니다. 아이디어는 여기에 readIn()
의 가장 간단한 형태의이close() 입력 스트림을 영구적으로 닫습니다.
classs Foo{
public static void(String[] arg){
String first = readIn("First, please");
System.out.println(first);
String second = readIn("Second, please");
System.out.println(second);
}
}
처럼 필요에 따라 readIn
를 호출하는 것입니다 : 나는 그것을 잘 작동 br.close()
문을 생략하면
static String readIn(String prompt){
System.out.println(prompt + ": ");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String line = br.readLine();
br.close(); // PROBLEM STATEMENT
return line;
}
- 나는 반복 readIn
를 호출 할 수 있습니다. 그러나 내가 닫아야 만한다면 br
, 그러면 첫 번째 호출 만 작동합니다. 두 번째 호출은 IOException: Stream closed
을 던졌습니다. 예상대로 같은 일이 readIn
에 시도 -과 - 자원 발생합니다
static String readIn(String prompt){
System.out.println(prompt + ": ");
String line;
try(
BufferedReader br = new BufferedReader(
new InputStreamReader(System.in)) )
{
line = br.readLine();
}
return line;
}
같은 일이 Scanner(System.in)
대신 BufferedReader
으로 발생합니다. 파일을 읽을 때 발생하지 않습니다.
readIn
을 호출 할 때마다 BufferedReader
또는 Scanner
이 새로 작성되면 어떤 스트림이 종료됩니까? 이것은 "close(
에 관한 것입니까?)"기본 Read/Closeable "(System.in)을 닫고 있습니까? 다시 열 수 있습니까? 이해하려고 노력하고있어, 고마워.
예, 기본 리소스를 닫습니다. 이것은 Javadoc에 분명히 명시되어 있습니다. 읽기마다 BufferedReader 또는 Scanner를 만들고 닫는 작업을해서는 안됩니다. 기본 리소스의 수명 동안 동일한 내용을 사용해야합니다. – EJP
확인. 그리고 기본 System.in 리소스의 수명은 무엇입니까? JVM의 실행과 동일합니까? – user3501758
그게 자발적으로 닫히지 않습니다. – EJP