Yes, that means System.in will be closed. Test case:
import java.util.*; public class CloseScanner { public static void main(String[] args) throws Exception { Scanner scanner = new Scanner(System.in); scanner.close(); System.in.read(); } }
This code exits with
$ java CloseScanner Exception in thread "main" java.io.IOException: Stream closed at java.io.BufferedInputStream.getBufIfOpen(BufferedInputStream.java:162) at java.io.BufferedInputStream.fill(BufferedInputStream.java:206) at java.io.BufferedInputStream.read(BufferedInputStream.java:254) at CloseScanner.main(CloseScanner.java:7)
After closing, you will not be able to use System.in for the rest of your program. The fact that close() is passed in is nice, because it means you don't need to maintain a separate link to the input stream so that you can close it later, for example:
scanner = new Scanner(foo.somethingThatMakesAnInputStream());
You can do this and call .close() on the scanner to close the underlying stream.
In most cases, you do not need to close System.in , so you do not want to call .close() in this case.
Fatalerror
source share