如何获取运行java程序的路径

2022-08-31 10:36:24

有没有办法得到正在运行的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

有什么办法可以做到这一点吗?



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

在此处获取解决方案

解决方案1(作者: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


解决方案2(埃里克)

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 文件,因此这并非在所有情况下都有效(因此 )。但是,您可以使用此技术找到包含该类的 JAR,并且可以通过替换 的调用来获取类文件的内容,无论该类是在文件系统上还是在 JAR 中,这都将起作用。IllegalStateExceptiongetResourceAsStream()getResource()


答案 1

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

答案 2

试试这个代码:

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

将 '' 替换为包含 main 方法的类。MyClass

或者,您也可以使用

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

上面提到的系统属性提供

用于查找包含类文件的目录和 JAR 归档文件的路径。类路径的元素由 path.separator 属性中指定的特定于平台的字符分隔。


推荐