"Ồ, Rishi! Chào!"

"Chào, Amigo! Cuộc sống thế nào?"

"Tuyệt. Bilaabo vừa kể cho tôi nghe rất nhiều điều thú vị về File và cách làm việc với nó."

"Khi nó xảy ra, tôi nghĩ rằng tôi có một cái gì đó để thêm vào chủ đề này."

"Thật không? Vậy thì tôi nghe hết rồi."

"Được rồi, nghe này. Java không ngừng phát triển. Các nhà phát triển của nó không ngừng tìm kiếm những cách mới để làm những việc khác hiệu quả hơn. Trong Java 7, họ đã thêm một giải pháp thay thế cho lớp Tệp."

Tệp, Đường dẫn - 1

"Thay thế?"

"Đúng vậy. Họ lấy lớp Tệp làm cơ sở, thêm một số nội dung mới, đổi tên các phương thức và sau đó cũng chia nó thành hai. Vì vậy, bây giờ có hai lớp mới: Đường dẫnTệpĐường dẫn thực sự là dạng tương tự mới của Tệp và Tệp là một lớp tiện ích (tương tự như các lớp Mảng và Bộ sưu tập). Tất cả các phương thức tĩnh của lớp Tệp đều ở đó. Làm theo cách này 'đúng hơn' về mặt OOP."

"Chà, nếu xét về OOP thì được. Vậy điều gì đã thay đổi?"

"Đầu tiên, họ quyết định không sao chép các phương thức đã trả về  các đối tượng Chuỗi  và Tệp . Trong lớp Đường dẫn  , tất cả các phương thức đều trả về một Đường dẫn .

"Thứ hai, họ đã chuyển rất nhiều phương thức tiện ích tĩnh vào lớp Tệp ."

"Thứ ba, nó trở nên thuận tiện hơn khi làm việc với các đường dẫn tương đối."

"Đây là danh sách các phương pháp:"

Các phương thức của lớp Path Sự miêu tả
boolean isAbsolute() Trả về true nếu đường dẫn là tuyệt đối.
Path getRoot() Trả về gốc của đường dẫn hiện tại, tức là thư mục trên cùng.
Path getFileName() Trả về tên tệp từ đường dẫn hiện tại.
Path getParent() Trả về thư mục từ đường dẫn hiện tại.
boolean startsWith(Path other) Kiểm tra xem đường dẫn hiện tại có bắt đầu bằng đường dẫn đã qua hay không.
boolean endsWith(Path other) Kiểm tra xem đường dẫn hiện tại có kết thúc bằng đường dẫn đã qua hay không.
Path normalize() Bình thường hóa đường dẫn hiện tại. Ví dụ: chuyển đổi «c:/dir/dir2/../a.txt» thành «c:/dir/a.txt»
Path relativize(Path other) Tính toán đường dẫn tương đối của hai đường dẫn, tức là «sự khác biệt giữa các đường dẫn»
Path resolve(String other) Giải quyết một đường dẫn tuyệt đối bằng cách sử dụng các đường dẫn hiện tại và tương đối.
URI toUri() Trả về URI nếu đường dẫn/tệp hiện tại.
Path toAbsolutePath() Chuyển đổi đường dẫn thành đường dẫn tuyệt đối nếu nó là đường dẫn tương đối.
File toFile() Trả về một đối tượng Tệp tương ứng với đối tượng Đường dẫn hiện tại.

"Và con đường hiện tại—đó là gì?"

"Đây là đường dẫn đã được chuyển đến hàm tạo của đối tượng Đường dẫn có các phương thức đang được gọi."

"OK. Vậy lớp Files có những phương thức nào?"

"Bạn đang vội đi đâu đó à? Tôi sẽ nói với bạn ngay bây giờ. Đây là những phương pháp quan trọng nhất:"

Các phương thức của lớp Files Sự miêu tả
Path createFile(…) Tạo một tập tin trên đĩa.
Path createDirectory(…) Tạo một thư mục.
Path createDirectories(…) Tạo một thư mục và tất cả các thư mục con của nó.
Path createTempFile(…) Tạo một tập tin tạm thời.
Path createTempDirectory(…) Tạo một thư mục tạm thời.
void delete(Path path) Xóa một tập tin.
Path copy(Path source, Path target,…) Sao chép một tập tin.
Path move(Path source, Path target,…) Di chuyển một tập tin.
boolean isSameFile(Path, Path) So sánh hai tập tin.
boolean isDirectory(Path) Đường dẫn có phải là một thư mục không?
boolean isRegularFile(Path) Đường dẫn có phải là tệp không?
long size(Path) Trả về kích thước tập tin.
boolean exists(Path) Có một đối tượng có cùng tên tồn tại?
boolean notExists(Path) Có một đối tượng có cùng tên không tồn tại?
long copy(InputStream, OutputStream) Sao chép các byte từ InputStream sang OutputStream.
long copy(Path, OutputStream) Sao chép tất cả các byte từ Đường dẫn đến Dòng đầu ra.
long copy(InputStream, Path) Sao chép tất cả các byte từ InputStream sang Đường dẫn.
byte[] read(InputStream, int initialSize) Đọc một mảng byte từ InputStream.
byte[] readAllBytes(Path path) Đọc tất cả các byte từ InputStream.
List<String> readAllLines(Path path,..) Đọc tệp văn bản và trả về một danh sách các chuỗi.
Path write(Path path, byte[] bytes,…) Ghi một mảng byte vào một tập tin.

"Thật thú vị! Rất nhiều chức năng thú vị và tất cả đều ở cùng một nơi."

"Hãy nhìn xem. Giả sử bạn muốn tải xuống một tệp từ Internet, sau đó gửi tệp đó cho ai đó. Để làm điều này, sẽ rất thuận tiện để tạo một tệp tạm thời trên đĩa và lưu dữ liệu đã đọc vào đó."

"Tải xuống một tệp từ Internet có khó không?"

"Rất đơn giản. Hãy xem ví dụ này:"

Mã số
URL url = new URL("https://www.google.com.ua/images/srpr/logo11w.png");
InputStream inputStream = url.openStream();

Path tempFile = Files.createTempFile("temp-",".tmp");
Files.copy(inputStream, tempFile);

"Và đó là nó?"

"Vâng, bạn đã mong đợi gì để xem? Chỉ có 4 dòng."

" Dòng 1.  Tạo một đối tượng URL mà URL của tệp hình ảnh được chuyển tới.

"" Dòng 2.  Một luồng để đọc tệp (InputStream) được mở trên đối tượng url.

"" Dòng 3. Phương pháp  này createTempFileđược sử dụng để tạo tệp tạm thời.

" Dòng 4.  Phương thức Files.copy sao chép dữ liệu từ  inputStream sang tempFile. Vậy là xong."

"Khéo léo!"

"Tuyệt. Tôi rất vui vì bạn thích nó. Tôi nghĩ bạn có thể tự tìm ra các phương pháp còn lại. Và tôi sẽ yêu cầu Diego giao cho bạn một số nhiệm vụ về chúng."

"Nhân tiện, đây là một liên kết tốt về tài liệu này"