如何获得运行java程序的path

有没有办法获得正在运行的Java程序的主要类的path。

结构是

D:/ |---Project |------bin |------src 

我想要得到的path为D:\Project\bin\

我试过System.getProperty("java.class.path"); 但问题是,如果我跑得像

 java -classpath D:\Project\bin;D:\Project\src\ Main Output Getting : D:\Project\bin;D:\Project\src\ Want : D:\Project\bin 

有没有办法做到这一点?



=====编辑=====

在这里得到解决scheme

  • 解决scheme1

Jon Skeet

 package foo; public class Test { public static void main(String[] args) { ClassLoader loader = Test.class.getClassLoader(); System.out.println(loader.getResource("foo/Test.class")); } } 

这打印出来了:

 file:/C:/Users/Jon/Test/foo/Test.class 

  • 解决scheme2

由埃里克森

 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()); 

请注意,大多数类文件被组合成JAR文件,所以这不会在任何情况下工作(因此IllegalStateException )。 但是,您可以使用这种方法find包含该类的JAR,并且可以通过将getResourceAsStream()replace为getResource()来获取类文件的内容,无论类是否在文件系统或JAR中。

试试这个代码:

 final File f = new File(MyClass.class.getProtectionDomain().getCodeSource().getLocation().getPath()); 

用包含主要方法的类replace“MyClass”

使用

 System.getProperty("java.class.path") 

请参阅http://docs.oracle.com/javase/tutorial/essential/environment/sysprop.html

你也可以很容易的把它分解成它的元素

 String classpath = System.getProperty("java.class.path"); String[] classpathEntries = classpath.split(File.pathSeparator); 

你实际上不想让你的主要类的path。 根据你的例子,你想获得当前的工作目录,即你的程序开始的目录。 在这种情况下,你可以说new File(".").getAbsolutePath()

  ClassLoader cl = ClassLoader.getSystemClassLoader(); URL[] urls = ((URLClassLoader)cl).getURLs(); for(URL url: urls){ System.out.println(url.getFile()); }