Eric Bergman-Terrell's Blog

Java Programming Tip: Get the Application Folder
January 19, 2009

There's the best way I've found for an application to find the path of the folder containing its code:

  1. Call getProtectionDomain().getCodeSource().getLocation().getPath() on one of your application's classes.
  2. URL Decode the results, otherwise it will have %20 instead of spaces if one or more of your folder names have embedded spaces.
  3. If the program is running on Windows, it will need to remove the initial "/" from the path.

Here's the code:

Note: If you search for other solutions to this problem, you'll find many people telling you to just call System.getProperty("user.dir"). This doesn't work in general, because it merely returns the current directory, not the directory that contains your application's code.

public static String getRootPath() {
String rootPath;

try {
rootPath = 
URLDecoder.decode(FileUtils.class.getProtectionDomain().getCodeSource().getLocation().getPath(), "UTF-8");

String osName = System.getProperty("os.name");

if (osName.toUpperCase().contains("WINDOWS")) {
rootPath = rootPath.substring(1);
}

rootPath = new File(rootPath).getParent();

} catch (UnsupportedEncodingException e) {
e.printStackTrace();

// If an error occurred, default to current directory.
rootPath = System.getProperty("user.dir");
}

Globals.getLogger().info(MessageFormat.format("getRootPath: {0}", rootPath));

return rootPath;
}
Keywords: Java, Application Folder, Directory, Windows, URL Decoding

Reader Comments

Comment on this Blog Post

Recent Posts

TitleDate
EBTCalc (Android) Version 1.53 is now availableMay 19, 2024
Vault 3 Security EnhancementsOctober 24, 2023
Vault 3 is now available for Apple OSX M2 Mac Computers!September 18, 2023
Vault (for Desktop) Version 0.77 ReleasedMarch 26, 2023
EBTCalc (Android) Version 1.44 is now availableOctober 12, 2021
Vault (Desktop) Version 0.72 ReleasedOctober 6, 2021
EBT Compass is Now Available for Android DevicesJune 2, 2021