Java: Kế thừa mã lệnh tập tin I/O

Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực

Khả năng tương tác với mã thừa kế

Trước khi phát hành Java SE 7, lớp java.io.File đã có cơ chế sử dụng cho tập tin I/O, nhưng nó có một số nhược điểm như sau:

  • Có nhiều phương thức không thể ném được ngoại lệ khi gặp lỗi, vì vậy nó đã không thể có được thông báo lỗi hữu ích. Ví dụ, nếu xóa một tập tin không thành công, chương trình sẽ nhận được một "lỗi delete" nhưng lại không biết tập tin đó có tồn tại hay không, người dùng không có quyền truy cập, hoặc một số vấn đề khác.
  • Phương thức  rename đã không làm việc liên tục trên các nền tảng.
  • Không có sự hỗ trợ thực sự cho các liên kết tượng trưng.
  • Cần có nhiều hỗ trợ cho siêu dữ liệu, chẳng hạn như các quyền của tập tin, chủ sở hữu tập tin, và các thuộc tính bảo mật khác.
  • Truy cập tập tin siêu dữ liệu không hiệu quả.
  • Nhiều phương thức của File không quy mô. Việc yêu cầu một danh sách thư mục lớn trên một máy chủ có thể dẫn đến hiện tượng bị treo. Các thư mục lớn cũng có thể gây ra các vấn đề về tài nguyên bộ nhớ, kết quả là dịch vụ bị từ chối.
  • Không thể viết mã đáng tin cậy mà đệ quy có thể đi bộ qua một cây tập tin và đáp ứng một cách thích hợp nếu có liên kết tượng trưng vòng.

Lớp java.io.File cung cấp phương thức toPath, phương thức này sẽ chuyển đổi thể hiện của File thành thể hiện của java.nio.file.Path như sau:

Path input = file.toPath();

Từ đó bạn có thể tận dụng lợi thế của các tính năng phong phú có sẵn của lớp Path.

Ví dụ, giả sử bạn có câu lệnh xóa một tập tin như sau:

file.delete();

Bạn có thể sửa đổi mã này sử dụng phương thức Files.delete như sau:

Path fp = file.toPath();

Files.delete(fp);

Ngược lại, phương thức Path.toFile sẽ tạo một đối tượng java.io.File cho đối tượng Path.

Ánh xạ chức năng java.io.File tới java.nio.file

Do Java thực thi tập tin I/O đã hoàn thiện cấu trúc từ phiên bản Java SE 7, nên bạn không thể trao đổi phương thức với phương thức. Nếu bạn muốn sử dụng các chức năng phong phú được cung cấp bởi gói java.nio.file, thì giải pháp dễ dàng nhất là sử dụng phương thức File.toPath như đã đề cập ở trên. Tuy nhiên, nếu bạn không muốn sử dụng giải pháp này hoặc nó không đáp ứng được nhu cầu của bạn thì bạn phải viết lại mã tập tin I/O của bạn.

Không có mối quan hệ một-một giữa hai API với nhau, nhưng bảng dưới đây cho bạn một ý tưởng chung rằng chức năng nào của java.io.File có thể ánh xạ tới java.nio.file và cho bạn biết nơi bạn có thể lấy thêm thông tin.

Chức năng của java.io.File
Chức năng củajava.nio.file
Vị trí
java.io.File
java.nio.file.Path
java.io.RandomAccessFile
Chức năng SeekableByteChannel
File.canReadcanWritecanExecute
Files.isReadableFiles.isWritable và  Files.isExecutable.
Trên các hệ thống tập tin UNIX, gói 
Managing Metadata (File and File Store Attributes) được sử dụng để kiểm tra 9 quyền tập tin.
File.isDirectory()File.isFile() và File.length()
Files.isDirectory(Path, LinkOption...), Files.isRegularFile(Path, LinkOption...) và Files.size(Path)
File.lastModified() và File.setLastModified(long)
Files.getLastModifiedTime(Path, LinkOption...) và Files.setLastMOdifiedTime(Path, FileTime)
Các phương thức File thiết lập các thuộc tính khác nhau: setExecutablesetReadablesetReadOnlysetWritable
Những phương thức này được thay thế bằng phương thức của Files là  setAttribute(Path, String, Object, LinkOption...).
new File(parent, "newfile")
parent.resolve("newfile")
Điều hành đường dẫn
File.renameTo
Files.move
File.delete
Files.delete
File.createNewFile
Files.createFile
File.deleteOnExit
Thay thế bằng tùy chọn DELETE_ON_CLOSE được xác định trong phương thức createFile.
File.createTempFile
Files.createTempFile(Path, String, FileAttributes<?>), Files.createTempFile(Path, String, String, FileAttributes<?>)
File.exists
Files.exists và Files.notExists
File.compareTo và equals
Path.compareTo và equals
File.getAbsolutePath và getAbsoluteFile
Path.toAbsolutePath
File.getCanonicalPath và getCanonicalFile
Path.toRealPath hoặc normalize
File.toURI
Path.toURI
File.isHidden
Files.isHidden
File.list và listFiles
Path.newDirectoryStream
File.mkdir và mkdirs
Path.createDirectory
File.listRoots
FileSystem.getRootDirectories
File.getTotalSpaceFile.getFreeSpace,File.getUsableSpace
FileStore.getTotalSpace, FileStore.getUnallocatedSpace, FileStore.getUsableSpace, FileStore.getTotalSpace
» Tiếp: Cách tạo và chèn dữ liệu vào file Excel
« Trước: Các phương thức hữu dụng khác
Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực
Copied !!!