1. Fileslớp học

lớp tập tin

Để làm việc với các tệp, có một lớp tiện ích bóng bẩy — java.nio.file.Files. Nó có phương pháp cho mọi dịp. Tất cả các phương thức của lớp này là tĩnh và hoạt động trên đối tượng Path. Có rất nhiều phương pháp, vì vậy chúng tôi sẽ chỉ xem xét những phương pháp quan trọng nhất:

Phương pháp Sự miêu tả
Path createFile(Path path)
Tạo một tệp mới có đường dẫn làpath
Path createDirectory(Path path)
Tạo một thư mục mới
Path createDirectories(Path path)
Tạo nhiều thư mục
Path createTempFile(prefix, suffix)
Tạo một tập tin tạm thời
Path createTempDirectory(prefix)
Tạo một thư mục tạm thời
void delete(Path path)
Xóa một tập tin hoặc thư mục nếu nó trống
Path copy(Path src, Path dest)
Sao chép một tập tin
Path move(Path src, Path dest)
Di chuyển một tập tin
boolean isDirectory(Path path)
Kiểm tra xem đường dẫn có phải là thư mục không phải tệp
boolean isRegularFile(Path path)
Kiểm tra xem đường dẫn có phải là tệp chứ không phải thư mục
boolean exists(Path path)
Kiểm tra xem một đối tượng có tồn tại ở đường dẫn đã cho hay không
long size(Path path)
Trả về kích thước tệp
byte[] readAllBytes(Path path)
Trả về toàn bộ nội dung của tệp dưới dạng một mảng byte
String readString(Path path)
Trả về toàn bộ nội dung của tệp dưới dạng chuỗi
List<String> readAllLines(Path path)
Trả về toàn bộ nội dung của tệp dưới dạng danh sách các chuỗi
Path write(Path path, byte[])
Ghi một mảng byte vào một tập tin
Path writeString(Path path, String str)
Ghi một chuỗi vào một tập tin
DirectoryStream<Path> newDirectoryStream(Path dir)
Trả về một tập hợp các tệp (và thư mục con) từ thư mục đã cho

2. Tạo tập tin và thư mục

Tập tin và thư mục rất dễ tạo. Hãy thuyết phục bản thân bằng một số ví dụ:

Mã số Ghi chú
Files.createFile(Path.of("c:\\readme.txt"));
Tạo một tập tin
Files.createDirectory(Path.of("c:\\test"));
Tạo một thư mục
Files.createDirectories(Path.of("c:\\test\\1\\2\\3"));
Tạo một thư mục và tất cả các thư mục con cần thiết nếu chúng không tồn tại.

3. Sao chép, di chuyển và xóa

Sao chép, di chuyển và xóa các tập tin thật dễ dàng. Điều này cũng áp dụng cho các thư mục, nhưng chúng phải trống.

Mã số Ghi chú
Path path1 = Path.of("c:\\readme.txt");
Path path2 = Path.of("c:\\readme-copy.txt");
Files.copy(path1, path2);
Sao chép một tập tin
Path path1 = Path.of("c:\\readme.txt");
Path path2 = Path.of("d:\\readme-new.txt");
Files.move(path1, path2);
Di chuyển và đổi tên một tập tin
Path path = Path.of("d:\\readme-new.txt");
Files.delete(path);
Xóa một tập tin

4. Kiểm tra loại và sự tồn tại của tệp

Khi bạn có một đường dẫn do người khác cung cấp, bạn muốn biết đó là tệp hay thư mục. Và nói chung, một tập tin/thư mục như vậy có tồn tại hay không?

Có những phương pháp đặc biệt cho việc này là tốt. Bạn cũng có thể dễ dàng tìm ra độ dài của tệp:

Mã số Ghi chú
Files.isRegularFile(Path.of("c:\\readme.txt"));
true
Files.isDirectory(Path.of("c:\\test"));
true
 Files.exists(Path.of("c:\\test\\1\\2\\3"));
false
Files.size(Path.of("c:\\readme.txt"));
10112

5. Làm việc với nội dung tệp

Cuối cùng, có một loạt các phương pháp giúp dễ dàng đọc hoặc ghi nội dung của tệp. Ví dụ:

Mã số Sự miêu tả
Path path = Path.of("c:\\readme.txt");
List<String> list = Files.readAllLines(path);

for (String str : list)
   System.out.println(str);

Đọc nội dung của tệp dưới dạng danh sách các chuỗi.

Hiển thị các chuỗi


6. Lấy nội dung của một thư mục

Phương pháp thú vị nhất vẫn còn. Nó được sử dụng để lấy các tệp và thư mục con trong một thư mục nhất định.

Chúng ta đang nói về newDirectoryStream()phương thức trả về một DirectoryStream<Path>đối tượng đặc biệt. Nó có một trình vòng lặp (!) mà bạn có thể sử dụng để lấy tất cả các tệp và thư mục con của một thư mục nhất định.

Điều này là dễ dàng hơn nó âm thanh.

Mã số Sự miêu tả
Path path = Path.of("c:\\windows");

try (DirectoryStream<Path> files = Files.newDirectoryStream(path)) {
   for (Path path : files)
      System.out.println(path);
}


Nhận một đối tượng có danh sách tệp
Lặp lại danh sách tệp

Đối DirectoryStream<Path>tượng có hai thuộc tính. Đầu tiên, nó có một trình lặp trả về đường dẫn tệp và chúng ta có thể sử dụng đối tượng này bên trong một for-eachvòng lặp.

Và thứ hai, đối tượng này là một luồng dữ liệu, vì vậy nó phải được đóng một cách rõ ràng bằng cách sử dụng phương close()thức hoặc khai báo sử dụng bên trong một try-with-resourceskhối.



7. Files.newInputStreamphương pháp

Bắt đầu với Java 5, các lớp FileInputStreamFileOutputStreamkhông được dùng nữa. Một trong những nhược điểm của chúng là khi các đối tượng của các lớp này được tạo ra, các tệp ngay lập tức được tạo trên đĩa. Và tất cả các ngoại lệ liên quan đến việc tạo tệp có thể bị ném.

Sau đó, điều này được công nhận không phải là quyết định tốt nhất. Theo đó, nên sử dụng các phương thức của java.nio.Fileslớp tiện ích để tạo các đối tượng tệp.

Dưới đây là so sánh giữa cách tiếp cận cũ và cách tiếp cận mới để tạo tệp:

Trước
String src = "c:\\projects\\log.txt";
InputStream input = new FileInputStream(src);
Sau đó
String src = "c:\\projects\\log.txt";
InputStream input = Files.newInputStream( Path.of(src) );

Và có một sự thay thế tương tự cho FileOutputStream:

Trước
String src = "c:\\projects\\log.txt";
OutputStream  output = new FileOutputStream( src );
Sau đó
String src = "c:\\projects\\log.txt";
OutputStream  output = Files.newOutputStream( Path.of( src ) );