01/10/2018, 15:36

Việc close Scanner, BufferReader System.in không thể mở lại (?)

Mình thật sự rất bực mình về cái này. Mình không hiểu lắm về cách thức hoạt động của nó.
Trên mạng người ta nói là lưu ý close() các stream trong finally (try/catch).

Mình viết một hàm a. Khai báo dùng BufferReader(System.in). Hoặc là Scanner(System.in)
Dùng xong mình close() nó trong finally.

Đến lần sau mình gọi cái hàm đó thì báo lỗi Stream Closed.

java.io.IOException: Stream closed


Tiếp theo
Mình khai báo nó bên trong class như là một thuộc tính static. Và mình dùng chung nó cho các hàm của class chứa hàm main.

Khi chương trình của mình phình to lên, mình viết thêm các class khác trong các pakage khác nhau. Mình phải new các BufferReader mới ở đó và close luôn tại đó.
Quay về class chứa hàm main, mình gọi các hàm dùng BufferReader thì lại bị lỗi Stream Closed.

Mọi người có thể giải thích tại sao và hướng giải quyết để mình new 1 đối tượng đọc dữ liệu từ console và close ngay trong hàm mà không bị sao không?

Hung viết 17:50 ngày 01/10/2018

When a Scanner is closed, it will close its input source if the source implements the Closeable interface.

https://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html

Bài liên quan
0