Tuyên bố từ chối trách nhiệm: Tôi đã xem xét tất cả các câu hỏi tôi có thể tìm thấy và không có câu nào trong số họ trả lời câu hỏi chính xác này. Nếu bạn tìm thấy một trong những xin vui lòng chỉ cho tôi để nó và lịch sự.Sử dụng Tệp hoặc FileReader bằng Máy quét?
Vì vậy, Oracle I/O tutorial mở một file văn bản với Scanner như sau:
new Scanner(BufferedReader(FileReader("xanadu.txt")));
Nhưng Javadoc mở một file văn bản với Scanner như thế này:
new Scanner(new File("myNumbers"));
Nó sẽ được tốt đẹp để sử dụng phương pháp đơn giản hơn, đặc biệt là khi tôi có một tệp nhỏ và có thể sống với bộ đệm nhỏ hơn, nhưng tôi cũng thấy mọi người nói rằng khi bạn mở Tệp trực tiếp, bạn can't close it. Nếu đó là trường hợp, tại sao thành ngữ đó được sử dụng trong tài liệu chính thức?
Chỉnh sửa: Tôi cũng đã xem new Scanner(FileReader("blah.txt"));
nhưng điều này có vẻ giống như điều tồi tệ nhất của cả hai thế giới.
Chỉnh sửa: Tôi không cố bắt đầu cuộc tranh luận về việc có nên sử dụng Máy quét hay không. Tôi có câu hỏi về cách sử dụng Máy quét. Cảm ơn bạn.
Như @Tudor đã chỉ ra, Tệp không đóng() - vì vậy tệp thực sự đóng khi bạn sử dụng Máy quét theo cách này, hoặc là tài nguyên còn lại bị treo? – orbfish
Có, nếu bạn vượt qua công cụ xây dựng File into Scanner, nó được sử dụng để mở luồng sẽ được đóng lại khi gọi phương thức Scanner.close(). Không quan trọng những gì bạn sử dụng constructor nếu bạn gọi close() đúng (ví dụ: từ try/finally) thì nó sẽ được đóng lại đúng cách. – maximdim