Is it possible to get the path to my .class file containing my main function from within main?
-
Do you mean you want to know where the .class file resides on the file system? – laz Apr 22 '09 at 16:57
4 Answers
URL main = Main.class.getResource("Main.class");
if (!"file".equalsIgnoreCase(main.getProtocol()))
throw new IllegalStateException("Main class is not stored in a file.");
File path = new File(main.getPath());
Note that most class files are assembled into JAR files so this won't work in every case (hence the IllegalStateException
). However, you can locate the JAR that contains the class with this technique, and you can get the content of the class file by substituting a call to getResourceAsStream()
in place of getResource()
, and that will work whether the class is on the file system or in a JAR.

- 265,237
- 58
- 395
- 493
That looks more like an end-user issue to me. Also consider the possible need to run multiple instances of any given application, and preventing users from doing so is going to become a major annoyance.
If the problem is with temporary file conflicts, then just make sure all your temporary files have unique names. This, as I understand it, is the most common reason people feel a need to prevent multiple instances of their applications from running.
P.S.: The java.io.File.createTempFile() methods are ideally suited for preventing temporary file conflicts because they automatically generate unique filenames.

- 227
- 2
- 5
According to http://www.cs.caltech.edu/courses/cs11/material/java/donnie/java-main.html, no. However, I suggest reading $0 (Program Name) in Java? Discover main class? , which at least gives you the main class .
What do you need it for? If you need it to get hold of any files that are in the same directory, that's what Class.getResourceAsStream() is for.

- 342,105
- 78
- 482
- 720
-
1trying to get a lock on my main class file in order to stop launching of my application more than once. – Hamza Yerlikaya Apr 22 '09 at 17:08