Có cần thiết phải đóng Scanner sau khi sử dụng xong không?

Anh chị cho em hỏi cái là có cần thiết phải đóng Scanner( scanner.close() ) sau khi mình sử dụng xong không ạ. Nếu có thì vì sao vậy ạ. Em cảm ơn.

Scanner là tream nên dùng xong phải đóng kết nối

2 Likes

Nên đóng tất cả các luồng đọc/ghi dữ liệu khi không cần dùng.

Nhưng lưu ý: nếu dùng Scanner để đọc System.in thì nên cẩn thận.

4 Likes

Em có tạo một số Method trong mỗi Method đó em có tạo mới Scanner sc = new Scanner(System.in) , sau khi em nhập xong thì em dùng sc.close() để đóng. Đến lúc em gọi Method đầu tiên vẫn chạy ổn nhưng đến Method sau thì nó báo lỗi. Em đã thử xóa sc.close() đi thì tất cả chạy bình thường, mỗi tội có cái cảnh báo " sc is never close ". Nếu em không tìm cách tắt cái thông báo đó đi thì có sao không ạ, vì lúc em run thì mọi thứ vẫn hoạt động bình thường ạ.

Tất cả stream khi dùng tùy vào cơ chế mà nên đóng ngay hay giữ. Mình có 1 cách dùng scanner như sau không biết hữu ích với bạn không:
Bên mình dubhf scanner để ứng dụng việc ghi log capture all in out từ system.print, exception.printrace. nên khi bắt đầu mình sẽ start riweng 1 tiến trình phụ trách khởi tạo sau đó read data từ scanner ra rồi ghi ra file .out và .error tùy dữ liệu capture. Còn ứng dụng thì chạy bt và bao giờ đóng ứng dụng mới coi là đóng stream

3 Likes

Bởi vậy:

Nếu phương được gọi phía trước đã đóng luồng (sc.close()) thì dẫn đến System.in đã bị đóng hoàn toàn. Các phương thức phía sau sẽ không thể thao tác được và các Scanner tạo mới sau đó sẽ quăng ngoại lệ NoSuchElementException.

3 Likes

Oke em hiểu rồi ạ, cảm ơn anh chị nhiều :grin:,

Em cảm ơn anh chị nhiều ạ

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?