Относительный путь к файлу в Java — методы File и Path
Программа на Java для получения относительного пути из двух абсолютных путей.
Пример 1: относительный путь через класс URI
import java.io.File;
import java.net.URI;
class Main {
public static void main(String[] args) {
try {
// Two absolute paths
File absolutePath1 = new File("C:\\Users\\Desktop\\Programiz\\Java\\Time.java");
System.out.println("Absolute Path1: " + absolutePath1);
File absolutePath2 = new File("C:\\Users\\Desktop");
System.out.println("Absolute Path2: " + absolutePath2);
// convert the absolute path to URI
URI path1 = absolutePath1.toURI();
URI path2 = absolutePath2.toURI();
// create a relative path from the two paths
URI relativePath = path2.relativize(path1);
// convert the URI to string
String path = relativePath.getPath();
System.out.println("Relative Path: " + path);
} catch (Exception e) {
e.getStackTrace();
}
}
}
Вывод:
Absolute Path1: C:\Users\Desktop\Programiz\Java\Time.java
Absolute Path2: C:\Users\Desktop
Relative Path: Programiz/Java/Time.java
В примере выше у нас два абсолютных пути absolutePath1 и absolutePath2. Мы использовали класс URI для преобразования абсолютных путей в относительный.
toURI() — преобразует объект
FileвURIrelativize() — извлекает относительный путь, сравнивая два абсолютных пути
getPath() — преобразует
URIв строку
Пример 2: относительный путь с помощью методов строк
import java.io.File;
class Main {
public static void main(String[] args) {
// Create file objects
File file1 = new File("C:\\Users\\Desktop\\Programiz\\Java\\Time.java");
File file2 = new File("C:\\Users\\Desktop");
// convert file objects to string
String absolutePath1 = file1.toString();
System.out.println("Absolute Path1: " + absolutePath1);
String absolutePath2 = file2.toString();
System.out.println("Absolute Path2: " + absolutePath2);
// get the relative path
String relativePath = absolutePath1.substring(absolutePath2.length());
System.out.println("Absolute Path: " + relativePath);
}
}
Вывод:
Absolute Path1: C:\Users\Desktop\Programiz\Java\Time.java
Absolute Path2: C:\Users\Desktop
Absolute Path: \Programiz\Java\Time.java
В примере выше мы преобразовали пути файлов в строки. Обратите внимание на выражение:
absolutePath1.substring(absolutePath2.length())
Здесь метод substring() возвращает часть absolutePath1, начинающуюся с позиции, равной длине absolutePath2. То есть строка, которую представляет absolutePath2, удаляется из absolutePath1.
Пример 3: относительный путь с помощью пакета java.nio.file
import java.nio.file.Path;
import java.nio.file.Paths;
class Main {
public static void main(String[] args) {
// Create file objects
Path absolutePath1 = Paths.get("C:\\Users\\Desktop\\Programiz\\Java\\Time.java");
Path absolutePath2 = Paths.get("C:\\Users\\Desktop");
// convert the absolute path to relative path
Path relativePath = absolutePath2.relativize(absolutePath1);
System.out.println("Relative Path: " + relativePath);
}
}
Вывод:
Relative Path: Programiz\Java\Time.java
В примере выше мы использовали метод relativize() интерфейса Path для получения относительного пути из двух абсолютных путей.