Kết Hợp Hai Đường Dẩn
(Joining Two Paths )

Trong Java, bạn có thể kết hợp hai đường dẫn bằng cách sử dụng phương thức resolve() của lớp Path. Phương thức này cho phép nối một đường dẫn con (partial path) vào một đường dẫn gốc, giúp tạo ra một đường dẫn đầy đủ và hợp lệ.

Dưới đây là ví dụ về cách sử dụng phương thức resolve() để kết hợp hai đường dẫn Trên Microsoft Windows:

(1) Trường hợp kết hợp đường dẫn gốc với đường dẫn phần

Ví dụ: Example.java

import java.nio.file.Path;
import java.nio.file.Paths;

public class Example {
    public static void main(String[] args) {
        // Tạo đối tượng Path gốc
        Path p1 = Paths.get("C:\\home\\joe\\foo");
        
        // Kết hợp đường dẫn gốc với đường dẫn phần
        Path result = p1.resolve("bar");
        
        // In kết quả ra màn hình
        System.out.format("Kết quả: %s%n", result);
    }
}

Kết quả của chương trình là:

Kết quả: C:\home\joe\foo\bar

(2) Trường hợp đường dẫn tuyệt đối

Khi bạn truyền vào phương thức resolve() một đường dẫn tuyệt đối, phương thức sẽ trả về đường dẫn tuyệt đối được truyền vào mà không thay đổi:

Ví dụ: Example.java

import java.nio.file.Path;
import java.nio.file.Paths;

public class Example {
    public static void main(String[] args) {
        // Kết hợp đường dẫn phần với một đường dẫn tuyệt đối
        Path result = Paths.get("foo").resolve("/home/joe");
        
        // In kết quả ra màn hình
        System.out.format("Kết quả: %s%n", result);
    }
}

Kết quả của chương trình là:

Kết quả: \home\joe

Phương thức resolve rất hữu ích để xây dựng các đường dẫn đầy đủ từ các phần khác nhau của đường dẫn, đặc biệt khi bạn cần làm việc với các tệp hoặc thư mục trong hệ thống tệp.

(3) Tạo đường dẫn tương đối giữa hai đường dẫn

Khi làm việc với hệ thống tệp, một yêu cầu phổ biến là khả năng xây dựng một đường dẫn từ một vị trí này đến một vị trí khác. Bạn có thể thực hiện điều này bằng cách sử dụng phương thức relativize(). Phương thức này xây dựng một đường dẫn bắt đầu từ đường dẫn gốc và kết thúc tại vị trí được chỉ định bởi đường dẫn được truyền vào. Đường dẫn mới sẽ tương đối so với đường dẫn gốc.

Ví dụ 1: Đường dẫn tương đối giữa các đường dẫn đồng cấp

Ví dụ: Example.java

import java.nio.file.Path;
import java.nio.file.Paths;

public class Example {
    public static void main(String[] args) {
        // Tạo hai đối tượng Path
        Path p1 = Paths.get("joe");
        Path p2 = Paths.get("sally");

        // Tạo đường dẫn tương đối từ p1 đến p2
        Path p1_to_p2 = p1.relativize(p2);
        System.out.format("Đường dẫn từ joe đến sally: %s%n", p1_to_p2);

        // Tạo đường dẫn tương đối từ p2 đến p1
        Path p2_to_p1 = p2.relativize(p1);
        System.out.format("Đường dẫn từ sally đến joe: %s%n", p2_to_p1);
    }
}

Kết quả của chương trình là:

Đường dẫn từ joe đến sally: ..\sally
Đường dẫn từ sally đến joe: ..\joe

Ví dụ 2: Đường dẫn tương đối trong cấu trúc thư mục phức tạp

Ví dụ: Example.java

import java.nio.file.Path;
import java.nio.file.Paths;

public class Example {
    public static void main(String[] args) {
        // Tạo hai đối tượng Path với cấu trúc thư mục
        Path p1 = Paths.get("home");
        Path p3 = Paths.get("home/sally/bar");

        // Tạo đường dẫn tương đối từ p1 đến p3
        Path p1_to_p3 = p1.relativize(p3);
        System.out.format("Đường dẫn từ home đến bar: %s%n", p1_to_p3);

        // Tạo đường dẫn tương đối từ p3 đến p1
        Path p3_to_p1 = p3.relativize(p1);
        System.out.format("Đường dẫn từ bar đến home: %s%n", p3_to_p1);
    }
}

Kết quả của chương trình là:

Đường dẫn từ home đến bar: sally\bar
Đường dẫn từ bar đến home: ..\..

Lưu ý:

↳ Một đường dẫn tương đối không thể được xây dựng nếu chỉ một trong các đường dẫn bao gồm phần tử gốc (root).

↳ Nếu cả hai đường dẫn đều bao gồm phần tử gốc, khả năng xây dựng đường dẫn tương đối phụ thuộc vào hệ thống.

↳ Phương thức relativize() rất hữu ích khi bạn cần tạo các đường dẫn tương đối giữa các thư mục hoặc tệp trong hệ thống tệp.

Hy vọng rằng qua các ví dụ trên, bạn sẽ hiểu rõ hơn về cách kết nối đường dẩn trong Java.

Câu Nói Truyền Cảm Hứng

“Bắt đầu ở đâu không quan trọng, quan trọng là bạn sẵn sàng bắt đầu.” – W. Clement Stone

Không Gian Tích Cực

“Chúc bạn luôn giữ vững niềm tin và sức mạnh để vượt qua mọi thử thách trong cuộc sống.”