有没有办法获取正在运行的java程序的主类路径。
结构是
D:/
|---Project
|------bin
|------src
我希望将路径设为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
有没有办法做到这一点?
=====编辑=====
在这里解决方案
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
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
)。但是,您可以使用此技术找到包含该类的JAR,并且您可以通过将getResourceAsStream()
替换为getResource()
来代替{{1}}来获取类文件的内容,这将是否有效class位于文件系统或JAR中。
答案 0 :(得分:118)
使用
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);
答案 1 :(得分:76)
试试这段代码:
final File f = new File(MyClass.class.getProtectionDomain().getCodeSource().getLocation().getPath());
将'MyClass
'替换为包含main方法的类。
或者您也可以使用
System.getProperty("java.class.path")
上面提到的System属性提供
用于查找包含类文件的目录和JAR存档的路径。 类路径的元素由特定于平台的元素分隔 path.separator属性中指定的字符。
答案 2 :(得分:20)
您实际上不希望获得主类的路径。根据您的示例,您希望获取当前工作目录,即程序启动的目录。在这种情况下,您可以说new File(".").getAbsolutePath()
答案 3 :(得分:0)
ClassLoader cl = ClassLoader.getSystemClassLoader();
URL[] urls = ((URLClassLoader)cl).getURLs();
for(URL url: urls){
System.out.println(url.getFile());
}