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
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…