Course – LS – All

Get started with Spring and Spring Boot, through the Learn Spring course:

>> CHECK OUT THE COURSE

1. Overview

Working with file paths in Java is a common task, and sometimes, we need to convert relative paths to absolute paths for various reasons. Whether we’re dealing with file manipulation, accessing resources, or navigating directories, knowing how to convert relative paths to absolute paths is essential.

In this tutorial, we’ll explore different approaches to achieve this conversion in Java.

2. Solution

2.1. Using the Paths Class

The java.nio.file package introduced in Java 7 provides the Paths class, which offers a convenient way to manipulate file and directory paths.

Let’s use the Paths class to convert a relative path to an absolute path:

String relativePath = "myFolder/myFile.txt";

Path absolutePath = Paths.get(relativePath).toAbsolutePath();

2.2. Using the File Class

Before Java 7, the java.io.File class provided a way to convert relative paths to absolute paths.

Here’s an example of how to convert relative paths using the File class:

String relativePath = "myFolder/myFile.txt";

File file = new File(relativePath);

String absolutePath = file.getAbsolutePath();

While it is recommended to use the newer Paths class for new projects, the File class remains available for legacy code.

2.3. Using the FileSystem Class

Another approach is to use the java.nio.file.FileSystem class, which provides methods to convert paths:

String relativePath = "myFolder/myFile.txt";

Path absolutePath = FileSystems.getDefault().getPath(relativePath).toAbsolutePath();

3. Example

Let’s test our solutions with a relative path:

String relativePath1 = "data/sample.txt";
System.out.println(convertToAbsoluteUsePathsClass(relativePath1));
System.out.println(convertToAbsoluteUseFileClass(relativePath1));
System.out.println(convertToAbsoluteUseFileSystemsClass(relativePath1));

The result will look like this (results may vary depending on the operating system used – this example uses Windows):

D:\SourceCode\tutorials\core-java-modules\core-java-20\data\sample.txt
D:\SourceCode\tutorials\core-java-modules\core-java-20\data\sample.txt
D:\SourceCode\tutorials\core-java-modules\core-java-20\data\sample.txt

Let’s try another one:

String relativePath2 = "../data/sample.txt";
System.out.println(convertToAbsoluteUsePathsClass(relativePath2));
System.out.println(convertToAbsoluteUseFileClass(relativePath2));
System.out.println(convertToAbsoluteUseFileSystemsClass(relativePath2));

And the result this time will look like this:

D:\SourceCode\tutorials\core-java-modules\core-java-20\..\data\sample.txt
D:\SourceCode\tutorials\core-java-modules\core-java-20\..\data\sample.txt
D:\SourceCode\tutorials\core-java-modules\core-java-20\..\data\sample.txt

If we want to remove any redundant elements (such as “.” or “..”) from the path, we can use the normalize() method of the Path class.

4. Conclusion

Converting relative paths to absolute paths is crucial for file manipulation, resource access, or directory navigation in Java.

In this tutorial, we explored different approaches to achieve this conversion.

As always, the example code from this article can be found over on GitHub.

Course – LS – All

Get started with Spring and Spring Boot, through the Learn Spring course:

>> CHECK OUT THE COURSE
res – REST with Spring (eBook) (everywhere)
Comments are open for 30 days after publishing a post. For any issues past this date, use the Contact form on the site.