Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
263 views
in Technique[技术] by (71.8m points)

java - Get location of JAR file

I'm trying to get the location a Runnable JAR file is run from. I tried doing

try {
    String path = new java.io.File(".").getCanonicalPath();
} catch (IOException e) {
    e.printStackTrace();
}

But that returns:

C:UsersKevinDesktop/server/Server

while the JAR file is located at

C:UsersKevinDesktop

I also tried doing

return new file(Server.class.getProtectionDomain().getCodeSource().getLocation().getPath());

But that returns:

C:UsersKevinDesktopserver.jar/server/Server

So basicly I want the path of the JAR file without the filename and not the ClassPath.

Any way of doing this?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Update

Since it doesn't work in certain test-cases, I'll update the answer.

The correct way to do this should be with ClassLoader:

File jarDir = new File(ClassLoader.getSystemClassLoader().getResource(".").getPath());
System.out.println(jarDir.getAbsolutePath());

Tested on various classpaths, the output was correct.


Old answer

This should work

File f = new File(System.getProperty("java.class.path"));
File dir = f.getAbsoluteFile().getParentFile();
String path = dir.toString();

It works for me, my program is in:

C:UsersUser01Documentsapp1distJavaApplication1.jar

And it returns

C:UsersUser01Documentsapp1dist

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...