Java File Path, Absolute Path and Canonical Path

Filed Under: Java

Today we will look into the Java file path. Java File path can be abstract, absolute or canonical.

Java File Path contains three methods for determining the file path, we will explore them in this tutorial.

  1. getPath(): This file path method returns the abstract pathname as String. If String pathname is used to create File object, it simply returns the pathname argument. If URI is used as argument then it removes the protocol and returns the file name.
  2. getAbsolutePath(): This file path method returns the absolute path of the file. If File is created with absolute pathname, it simply returns the pathname.

    If the file object is created using a relative path, the absolute pathname is resolved in a system-dependent way. On UNIX systems, a relative pathname is made absolute by resolving it against the current user directory.

    On Microsoft Windows systems, a relative pathname is made absolute by resolving it against the current directory of the drive named by the pathname, if any; if not, it is resolved against the current user directory.

  3. getCanonicalPath(): This path method returns the canonical pathname that is both absolute and unique. This method first converts this pathname to absolute form if necessary, as if by invoking the getAbsolutePath method, and then maps it to its unique form in a system-dependent way.

    This typically involves removing redundant names such as “.” and “..” from the pathname, resolving symbolic links (on UNIX platforms), and converting drive letters to a standard case (on Microsoft Windows platforms).

Java File Path Example

Let’s see different cases of the file path in java with a simple program.

package com.journaldev.files;


public class JavaFilePath {

	public static void main(String[] args) throws IOException, URISyntaxException {
		File file = new File("/Users/pankaj/test.txt");
		// relative path
		file = new File("test.xsd");
		// complex relative paths
		file = new File("/Users/pankaj/../pankaj/test.txt");
		// URI paths
		file = new File(new URI("file:///Users/pankaj/test.txt"));

	private static void printPaths(File file) throws IOException {
		System.out.println("Absolute Path: " + file.getAbsolutePath());
		System.out.println("Canonical Path: " + file.getCanonicalPath());
		System.out.println("Path: " + file.getPath());


Below image shows the output produced by the above java file path program.

java file path, file path in java, absolute path, canonical path

The output is self-explanatory. Based on the output, using the canonical path is best suitable to avoid any issues because of relative paths.

Also, note that the java file path methods don’t check if the file exists or not. They just work on the pathname of the file used while creating the File object. That’s all for different types of the file path in java.

You can checkout more java IO examples from our GitHub Repository.


  1. Damien Brock says:

    Try to use Long Path Tool, it really can help you with that.

  2. Tristan says:

    Does getAbsolutePath has to resolve symbolic links? According to this article resolving symbolic links (which always is system dependent) does only happen when calling getCanonicalPath, but a simple test case shows that getAbsolutePath also resolves symbolic links. Do you have more information about this?

  3. Mayuri says:

    This will work bt i want external USB device path then what should we do??

    1. Pankaj says:

      When you connect the external USB drive, it gets mounted and you can use the same path for accessing files in it.

Leave a Reply

Your email address will not be published. Required fields are marked *

Generic selectors
Exact matches only
Search in title
Search in content
Search in posts
Search in pages