Chuyển Đổi Một Đường Dẩn
(Converting a Path)
Trong Java, bạn có thể sử dụng ba phương thức chính để chuyển đổi một đối tượng Path thành các định dạng khác nhau, tùy thuộc vào mục đích sử dụng:
Chuyển đổi thành URI
Phương thức toUri() chuyển đổi đường dẫn thành một URI, mà bạn có thể sử dụng để mở tệp từ trình duyệt. Ví dụ:
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
Path path = Paths.get("/home/user/documents/example.txt");
// Chuyển đổi đường dẫn thành URI
java.net.URI uri = path.toUri();
// In URI ra màn hình
System.out.format("URI: %s%n", uri);
}
}
Kết quả của chương trình là:
file:///home/user/documents/example.txt: URI đại diện cho vị trí của tệp tin trên hệ thống tệp. URI này có thể được sử dụng để mở tệp từ trình duyệt hoặc các ứng dụng hỗ trợ URI.
Việc sử dụng URI giúp bạn truy cập tài nguyên từ nhiều nguồn khác nhau và mở rộng khả năng tích hợp trong các ứng dụng khác.
Chuyển đổi thành đường dẫn tuyệt đối
Phương thức toAbsolutePath() chuyển đổi một đường dẫn thành đường dẫn tuyệt đối. Nếu đường dẫn đã là tuyệt đối, nó sẽ trả về chính đối tượng Path đó. Phương thức này hữu ích khi xử lý tên tệp do người dùng nhập vào:
Ví dụ: Example.java
import java.nio.file.Path;
import java.nio.file.Paths;
public class Example {
public static void main(String[] args) {
if (args.length < 1) {
System.out.println("Example.java");
System.exit(-1);
}
// Chuyển đổi chuỗi nhập từ người dùng thành đối tượng Path
Path inputPath = Paths.get(args[0]);
// Chuyển đổi Path thành đường dẫn tuyệt đối
Path absolutePath = inputPath.toAbsolutePath();
// In đường dẫn tuyệt đối ra màn hình
System.out.format("Đường dẫn tuyệt đối: %s%n", absolutePath);
}
}
Kết quả của chương trình là:
Kết quả sẽ phụ thuộc vào đường dẫn bạn cung cấp:
↳ Nếu đường dẫn nhập vào đã là đường dẫn tuyệt đối (ví dụ: /home/user/docs/file.txt), phương thức toAbsolutePath() sẽ trả về chính đường dẫn đó.
↳ Nếu đường dẫn nhập vào là tương đối (ví dụ: file.txt), phương thức toAbsolutePath() sẽ chuyển đổi nó thành đường dẫn đầy đủ, bằng cách thêm đường dẫn của thư mục làm việc hiện tại.
↳ Phương thức toAbsolutePath() chuyển đổi đầu vào của người dùng và trả về một Path với các giá trị hữu ích khi truy vấn. Tệp không cần phải tồn tại để phương thức này hoạt động.
Chuyển đổi thành đường dẫn thực
Phương thức toRealPath() trả về đường dẫn thực của một tệp tồn tại. Phương thức này thực hiện nhiều thao tác trong một lần gọi:
↳ Nếu đối số true được truyền vào và hệ thống tệp hỗ trợ liên kết tượng trưng (symbolic links), phương thức này sẽ giải quyết bất kỳ liên kết tượng trưng nào trong đường dẫn.
↳ Nếu Path là tương đối, nó sẽ trả về một đường dẫn tuyệt đối.
↳ Nếu Path chứa các phần tử thừa, nó sẽ trả về một đường dẫn với các phần tử đó đã bị loại bỏ.
Phương thức này sẽ ném ra một ngoại lệ nếu tệp không tồn tại hoặc không thể truy cập được. Bạn có thể bắt ngoại lệ khi muốn xử lý các trường hợp này. Ví dụ:
Ví dụ: Example.java
import java.io.IOException;
import java.nio.file.NoSuchFileException;
import java.nio.file.Path;
import java.nio.file.Paths;
public class Example {
public static void main(String[] args) {
if (args.length < 1) {
System.out.println("Example.java");
System.exit(-1);
}
// Chuyển đổi chuỗi nhập từ người dùng thành đối tượng Path
Path inputPath = Paths.get(args[0]);
try {
// Chuyển đổi Path thành đường dẫn thực
Path realPath = inputPath.toRealPath();
// In đường dẫn thực ra màn hình
System.out.format("Đường dẫn thực: %s%n", realPath);
} catch (NoSuchFileException x) {
System.err.format("%s: không tồn tại tệp hoặc thư mục%n", inputPath);
} catch (IOException x) {
System.err.format("%s%n", x);
}
}
}
Kết quả của chương trình là:
Kết quả sẽ phụ thuộc vào đường dẫn bạn cung cấp. Ví dụ, nếu đường dẫn chứa liên kết tượng trưng hoặc phần tử dư thừa, phương thức toRealPath() sẽ trả về đường dẫn đã được chuẩn hóa và giải quyết, chẳng hạn như:
Nếu tệp không tồn tại hoặc có lỗi, thông báo lỗi sẽ được hiển thị:
Hoặc
java.io.IOException: I/O error
Hy vọng rằng qua các ví dụ trên, bạn sẽ hiểu rõ hơn về cách chuyển đổi đường dẩn trong Java.