Portable filenames in Java

By Steve Claridge on 2014-03-15.

You should always use a forward-slash in a filename. Java will substitute forward-slashes for back-slashes if it is running on Windows, which means you can define:

c:/windows/temp/blah.pdf

instead of having to escape each back-slash:

c:\\windows\\temp\\blah.pdf

The first version is a bit more readable but it still isn't portable because you have the c: at the start, which won't work on Linux. Luckily Java has another trick up its sleeve: you don't need to specify the Windows drive name if you are accessing a file on the same drive as was used to execute the JVM. Lets say we are logging to /tmp/application.log on Linux and to the c:\tmp\application.log file on Windows, we only need to specify the filename once in our code as:

/tmp/application.log

Java will convert the forward-slashes to back-slashes on Windows and it will also automatically load the file from the C: drive as long as the Java application itself was also run from the C: drive.

Portable filenames are easy in Java. Write Once Run Anywhere.