Java: Liên kết, liên kết tượng trưng hay không phải

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

Như đã đề cập ở những bài viết trước, gói java.nio.file và lớp Path là "liên kết nhận thức". Mỗi phương thức Path hoặc là phát hiện phải làm gì khi một liên kết tượng trưng là gặp phải, hoặc nó cung cấp một tùy chọn cho phép bạn cấu hình các hành vi khi gặp một liên kết tượng trưng.

Các bài viết thảo luận cho đến nay đã nói về biểu tượng hay liên kết mềm, nhưng một số hệ thống tập tin cũng hỗ trợ các liên kết cứng. Liên kết cứng có nhiều hạn chế hơn so với các liên kết tượng trưng, cụ thể ​​như sau:

  • Đích của liên kết phải tồn tại.
  • Liên kết cứng nói chung là không được phép trên các thư mục.
  • Liên kết cứng không được phép vượt qua các phân vùng. Do đó, chúng không thể tồn tại trên hệ thống tập tin.
  • Một liên kết cứng có vẻ như hoạt động như một tập tin thường xuyên, vì vậy nó có thể khó tìm thấy.
  • Một liên kết cứng xét về ý nghĩa và mục đích, thì cùng một thực thể giống như file gốc. Nó có cùng các quyền tập tin, tem thời gian, và như vậy. Tất cả các thuộc tính giống hệt nhau.

Do những hạn chế, liên kết cứng không được sử dụng như là các liên kết tượng trưng, ​​nhưng phương thức Path làm việc ổn định hơn so với liên kết cứng.

Một số mục trong bài viết này là như sau:

  • Tạo một liên kết tượng trưng
  • Tạo một liên kết cứng
  • Phát hiện liên kết tượng trưng
  • Tìm đích của liên kết

Tạo một liên kết tượng trưng

Nếu hệ thống tập tin của bạn hỗ trợ, bạn có thể tạo một liên kết tượng trưng bằng phương thức createSymbolicLink(Path, Path, FileAttribute<?>). Đối số Path thứ hai thể hiện tập tin hoặc thư mục đích và có thể hoặc không tồn tại. Đoạn mã sau tạo một liên kết tượng trưng với các quyền mặc định:

Path newLink = ...;
Path target = ...;
try {
    Files.createSymbolicLink(newLink, target);
} catch (IOException x) {
    System.err.println(x);
} catch (UnsupportedOperationException x) {
    // Some file systems do not support symbolic links.
    System.err.println(x);
}

vararg FileAttributes cho phép bạn chỉ định các thuộc tính tập tin ban đầu được thiết lập nguyên tử khi liên kết được tạo ra. Tuy nhiên, đối số này được dự định để sử dụng trong tương lai và hiện tại chưa được thực hiện.

Tạo một liên kết cứng

Bạn có thể tạo một liên kết cứng (hoặc liên kết thường xuyên) đến một tập tin hiện có bằng cách sử dụng phương thức CreateLink(Path, Path). Đối số Path thứ hai là đường dẫn tới tập tin hiện có, và nó phải tồn tại, nếu không thì một NoSuchFileException được ném. Đoạn mã sau đây cho thấy cách tạo ra một liên kết:

Path newLink = ...;
Path existingFile = ...;
try {
    Files.createLink(newLink, existingFile);
} catch (IOException x) {
    System.err.println(x);
} catch (UnsupportedOperationException x) {
    // Some file systems do not
    // support adding an existing
    // file to a directory.
    System.err.println(x);
}

Phát hiện liên kết tượng trưng

Để xác định liệu một thể hiện Path nào đó có là một liên kết tượng trưng hay không, ​​bạn có thể sử dụng phương thức isSymbolicLink(Path). Đoạn mã sau đây cho thấy cách làm:

Path file = ...;
boolean isSymbolicLink =
    Files.isSymbolicLink(file);

Tìm đích của liên kết

Bạn có thể có được đích của một liên kết tượng trưng bằng phương thức readSymbolicLink(Path), cụ thể như sau:

You can obtain the target of a symbolic link by using the readSymbolicLink(Path) method, as follows:

Path link = ...;
try {
    System.out.format("Target of link" +
        " '%s' is '%s'%n", link,
        Files.readSymbolicLink(link));
} catch (IOException x) {
    System.err.println(x);
}

Nếu Path không phải là một liên kết tượng trưng thì ​​phương thức này sẽ ném một NotLinkException.

» Tiếp: Đi bộ qua cây tập tin
« Trước: Tạo và đọc thư mụ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 !!!