Loại Bỏ Các Phần Dư Thừa Khỏi Một Đường Dẩn
(Removing Redundancies From a Path )
Một số hệ thống tệp sử dụng ký hiệu "." để biểu thị thư mục hiện tại và ".." để biểu thị thư mục cha. Bạn có thể gặp tình huống một Path chứa thông tin thư mục dư thừa. Ví dụ, một máy chủ được cấu hình để lưu trữ các tệp log trong thư mục "/dir/logs/.", và bạn muốn xóa ký hiệu "/." khỏi đường dẫn.
Các ví dụ sau đây đều bao gồm các phần dư thừa:
↳ /home/./joe/foo
↳ /home/sally/../joe/foo
Phương thức normalize() loại bỏ bất kỳ phần tử dư thừa nào, bao gồm cả các trường hợp "." hoặc "thư mục/..". Cả hai ví dụ trên đều được chuẩn hóa thành /home/joe/foo.
Quan trọng cần lưu ý là phương thức normalize() không kiểm tra hệ thống tệp khi dọn dẹp đường dẫn. Đó là một hoạt động cú pháp thuần túy. Trong ví dụ thứ hai, nếu sally là một liên kết tượng trưng, việc xóa sally/.. có thể dẫn đến một Path không còn định vị được tệp dự định.
Để dọn dẹp một đường dẫn đồng thời đảm bảo kết quả định vị đúng tệp, bạn có thể sử dụng phương thức toRealPath(). Phương thức này sẽ được mô tả trong phần tiếp theo, Chuyển đổi một Path.
Dưới đây là một ví dụ Java sử dụng phương thức normalize() để loại bỏ các phần tử dư thừa trong đường dẫn:
Ví dụ: Example.java
import java.nio.file.Path;
import java.nio.file.Paths;
public class Example {
public static void main(String[] args) {
// Đường dẫn với các phần tử dư thừa
Path path1 = Paths.get("/home/./joe/foo");
Path path2 = Paths.get("/home/sally/../joe/foo");
// Chuẩn hóa đường dẫn
Path normalizedPath1 = path1.normalize();
Path normalizedPath2 = path2.normalize();
// In thông tin về đường dẫn đã chuẩn hóa
System.out.println("Đường dẫn đã chuẩn hóa 1: " + normalizedPath1);
System.out.println("Đường dẫn đã chuẩn hóa 2: " + normalizedPath2);
}
}
Kết quả của chương trình là:
Đường dẫn đã chuẩn hóa 2: \home\joe\foo
Trong ví dụ này, phương thức normalize() đã loại bỏ các phần tử dư thừa như "." và "sally/..", trả về đường dẫn chính xác mà không chứa thông tin dư thừa.
Hy vọng rằng qua các ví dụ trên, bạn sẽ hiểu rõ hơn về cách loại bỏ phần dư thừa của đường dẫn trong Java.