有没有一种方法可以获取正在运行的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文件,并通过将getResource()
调用替换为getResourceAsStream()
调用来获取类文件的内容,这样无论类是在文件系统中还是在JAR文件中都可以工作。
System.getProperty("path.separator");
。 - Uwe Plonus