Относительный путь к файлу в 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 в URI

  • relativize() — извлекает относительный путь, сравнивая два абсолютных пути

  • 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 для получения относительного пути из двух абсолютных путей.