如何获得运行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()); }