Java Program to Get the relative path from two absolute paths

Example 1: Get a relative path from two absolute paths using URI class

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();
    }
  }
}

Output

Absolute Path1: C:\Users\Desktop\Programiz\Java\Time.java
Absolute Path2: C:\Users\Desktop
Relative Path: Programiz/Java/Time.java

In the above example, we have two absolute paths named absolutePath1 and absolutePath2. We have used the URI class to convert the absolute paths into the relative path.

  • toURI() - converts the File object to a Uri
  • relativize() - extracts the relative path by comparing two absolute paths with one another
  • getPath() - converts the Uri into a string

Recommended Reading:


Example 2: Get a relative path from two absolute path using String methods

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);
  }
}

Output

Absolute Path1: C:\Users\Desktop\Programiz\Java\Time.java
Absolute Path2: C:\Users\Desktop
Absolute Path: \Programiz\Java\Time.java

In the above example, we have converted the file paths to strings. Notice the expression,

absolutePath1.substring(absolutePath2.length())

Here, the substring() method returns the part of absolutePath1 starting from index equal to the length of absolutePath2. That is, the string represented by absolutePath2 is removed from absolutePath1.

To learn more about how substring works, visit Java String substring().


Example 3: Get a relative path from two absolute paths using java.nio.file package

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);

  }
}

Output

Relative Path: Programiz\Java\Time.java

In the above example, we have used the relativize() method of the Path interface to get a relative path from two absolute paths.

Recommended Readings:

Did you find this article helpful?