Java Abstract, Absolute, Relative, Canonical Pathname

In this tutorial, we will understand the basic concepts of abstract, absolute, relative, and canonical pathnames in java with suitable examples.

What are Path and Pathname?


A path is a hierarchy of directories that locate a file or a directory.

A pathname is a string representation of a path. A separator character (such as Windows backslash [\] ) that is platform-dependent is present between the consecutive names.

For example, suppose we create two objects of the File class that stores two pathname strings. The statements are:

1) File file = new File("/Java/myfile.dat"); // For Unix or Linux platform.
2) File file = new File("D:\\Java\\myfile.dat"); // For Windows platform.

In the first statement, a pathname starts with the root directory symbol /, and continues with directory name Java, separator character /, file name myfile.dat.

In the second statement, a pathname starts with drive specifier D:, and continues with root directory symbol \, directory name Java, separator character \, and filename myfile.dat.

Abstract Pathname in Java


When a file or directory is stored in a system, the pathname string that represents the name is machine-dependent.

An abstract pathname consists of an optional prefix string, such as disk drive specifiers, “/” for Unix, or “\\” for Windows, and a sequence of zero or more string names.

The prefix string is platform-dependent. The last name in the abstract pathname represents a file or directory. All other names represent directories.


When an abstract pathname is converted into a pathname string, each name is separated from the next name by the default name separator character.

For example, File(String pathname) converts pathname string /Java/myfile.dat to abstract pathname \Java\myfile.dat on a Windows platform and /Java/myfile.dat on the Linux platform.

Absolute Pathname in Java


An absolute pathname is a pathname that starts with a root directory symbol. It is considered a complete name. Complete means no other information is required to locate a file.

For example, suppose the file ScienceDemo.java is placed at the following location:

C:\Java\workspace\JavaProject\src\JavaProgram\ScienceDemo.java

This complete name is the absolute pathname of the file ScienceDemo.java. No other information is required to locate this file in the system.

Relative Pathname in Java


A relative pathname is a pathname that does not start with the root directory symbol. It is interpreted through information taken from some other pathname.

For example, JavaProject\src\JavaProgram\ScienceDemo.java is a relative pathname. JavaProject is the current user directory.

The current directory can be determined by the following syntax:

System.getProperty("user.dir");

Canonical Pathname in Java


A canonical pathname is a pathname that is considered both absolute and unique. This pathname is system-dependent.

For example, suppose an absolute path of a file on Microsoft Windows machine is

C:\Java\workspace\JavaProject\src\JavaProgram\ScienceDemo.java

Consider the following statements below:

// Creating an object of File class.
    File file = new File(d:\\Java\\workspace\\JavaProject\\src\\JavaProgram\\ScienceDemo.java);
    System.out.println(f.getAbsolutePath());
    System.out.println(f.getCanonicalPath());

The call to getAbsolutePath() method will display the following string:

c:\Java\workspace\JavaProject\src\JavaProgram\ScienceDemo.java

The call to getCanonicalPath() method will display the following string:

C:\Java\workspace\JavaProject\src\JavaProgram\ScienceDemo.java

As you can observe in the canonical path, the drive letter is converted to upper case on a Microsoft Windows system.


Hope that this tutorial has covered almost all the important points related to abstract, absolute, relative, and canonical pathnames in Java. I hope that you will have understood the basic points of path and pathnames.
Thanks for reading!!!