In Java, we can use the following code snippets to get the path of a running JAR file.

  // static
  String jarPath = ClassName.class
          .getProtectionDomain()
          .getCodeSource()
          .getLocation()
          .toURI()
          .getPath();

  // non-static
  String jarPath = getClass()
          .getProtectionDomain()
          .getCodeSource()
          .getLocation()
          .toURI()
          .getPath();

Sample output.

/home/favtuts/projects/core-java/java-io/target/java-io.jar

1. Get the path of running JAR

1.1 Create an executable JAR file.

pom.xml

  <!-- Make this jar executable -->
  <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-jar-plugin</artifactId>
      <version>3.2.0</version>
      <configuration>
          <archive>
              <manifest>
                  <addClasspath>true</addClasspath>
                  <mainClass>com.favtuts.io.howto.resources.TestApp</mainClass>
              </manifest>
          </archive>
      </configuration>
  </plugin>

1.2 Run the below code to get the name or path of the running JAR file.

TestApp.java

package com.favtuts.io.howto.resources;

import java.net.URISyntaxException;

public class TestApp {
    
    public static void main(String[] args) {
        
        TestApp obj = new TestApp();

        try {
            
            // Get path of the JAR file
            String jarPath = TestApp.class
                .getProtectionDomain()
                .getCodeSource()
                .getLocation()
                .toURI()
                .getPath();
            System.out.println("JAR Path : " + jarPath);

            // Get name of the JAR file
            String jarName = jarPath.substring(jarPath.lastIndexOf("/") + 1);
            System.out.printf("JAR Name: " + jarName);

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

}

Output

$ mvn clean package

$ java -jar target/java-io.jar

JAR Path : /home/mkyong/projects/core-java/java-io/target/java-io.jar
JAR Name: java-io.jar

2. toURI()?

If the file name or file path contains special characters, for example, %, the .getLocation.getPath() will encode the special characters.

try {

      // return raw, no encode
      String jarPath = TestApp.class
              .getProtectionDomain()
              .getCodeSource()
              .getLocation()
              .toURI()
              .getPath();
      System.out.println("JAR Path : " + jarPath);

      // url encoded
      String jarPath2 = TestApp.class
              .getProtectionDomain()
              .getCodeSource()
              .getLocation() //.toURI
              .getPath();
      System.out.println("JAR Path 2 : " + jarPath2);



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

Output

$ java -jar java-io%test.jar

JAR Path : /home/favtuts/projects/core-java/java-io/target/java-io%test.jar

JAR Path 2 : /home/favtuts/projects/core-java/java-io/target/java-io%25test.jar

Download Source Code

$ git clone https://github.com/favtuts/java-core-tutorials-examples

$ cd java-io

References

Leave a Reply

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