2015-08-21 17 views
13

Trong khi viết câu trả lời xung quanh SO, người dùng đã cố gắng chỉ ra rằng java.io.File không nên được sử dụng trong mã mới, thay vào đó, ông cho rằng đối tượng mớijava.nio.Files sẽ được sử dụng thay thế; anh ta liên kết với this article.java.io.File vs java.nio.Files được ưu tiên trong mã mới?

Bây giờ tôi đã phát triển ở Java trong nhiều năm nay, và chưa từng nghe ý kiến ​​này trước đây; kể từ khi đọc bài đăng của mình, tôi đã tìm kiếm và không tìm thấy nhiều nguồn khác xác nhận điều này, và cá nhân tôi cảm thấy nhiều điểm được tranh luận trong bài viết yếu và nếu bạn biết cách đọc chúng, các lỗi do Tệp thường sẽ cho bạn biết chính xác vấn đề là gì.

Như tôi đang liên tục phát triển mã mới câu hỏi của tôi là thế này:

Đây có phải là một cuộc tranh cãi tích cực trong cộng đồng Java? Có phải Files được ưu tiên hơn File để có mã mới không? Những lợi thế/bất lợi chính giữa hai là gì?

+0

Một lý do chính đáng là sử dụng luồng cho các thao tác tệp ví dụ: đọc danh sách tệp dưới dạng luồng thay vì danh sách chuỗi – Umesh

Trả lời

11

Các documentation mà bạn liên kết cung cấp cho câu trả lời:

Gói java.nio.file định nghĩa các giao diện và các lớp dành cho các máy ảo Java để truy cập các tập tin, các thuộc tính tập tin, và các hệ thống tập tin. API này có thể được sử dụng để khắc phục nhiều hạn chế của lớp java.io.File . Phương thức toPath có thể được sử dụng để lấy Đường dẫn sử dụng đường dẫn trừu tượng được đại diện bởi đối tượng Tệp để định vị tệp . Đường dẫn kết quả có thể được sử dụng với lớp Tệp để cung cấp truy cập hiệu quả và rộng hơn cho các hoạt động tệp bổ sung, thuộc tính tệp và các ngoại lệ I/O để giúp chẩn đoán lỗi khi thao tác trên tệp bị lỗi.

5

File có triển khai mới hơn: Path. Với người xây dựng Paths.get("..."). Và Files có nhiều chức năng tiện ích tốt đẹp với việc triển khai tốt hơn quá (move thay vì đôi khi thất bại File.renameTo).

A Path duy trì hệ thống tệp của nó. Do đó bạn có thể sao chép ra khỏi hệ thống tệp zip ("jar: file: ..... .zip") một số đường dẫn đến hệ thống tệp khác và ngược lại.

File.toPath() có thể giúp chuyển đổi gia tăng.

Chỉ sử dụng các tiện ích trong số Files chuyển sang các lớp mới có lợi nhuận.

1

Tôi sẽ nói rằng không được "ưa thích". Thay vào đó, tôi khuyên bạn nên xem xét chức năng mà ứng dụng của bạn yêu cầu và sử dụng các thiết bị của java.io.File hoặc java.nio.Files đáp ứng các yêu cầu tốt hơn.

Câu trả lời có thể là bản vẽ hoặc java.nio.Files là tốt hơn. Nhưng tùy thuộc vào bạn hoặc nhóm của bạn để quyết định, không phải một số lập trình viên khác trên SO.

Các vấn đề liên quan