代码之家  ›  专栏  ›  技术社区  ›  Troskyvs

当前“main”类的Java:URL.getPath()返回“null”,为什么?

  •  0
  • Troskyvs  · 技术社区  · 7 年前

    public class core3 {
        public static void main(String[] args) {
            try {
                URL url = new core3().getClass().getClassLoader().getResource("");
                System.out.println(url);
                System.out.println(System.getProperty(url.getPath()));//print null
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    

    file:/D:/Documents/myproject/test01/target/classes/
    null
    

    为什么第二次打印返回null?如何修复它?

    谢谢

    2 回复  |  直到 7 年前
        1
  •  0
  •   AutoAnswerer    7 年前

    System.getProperty() 用于获取系统属性。例如,“java.home”系统属性通常指向java安装的位置。描述了系统属性 here .

    System.getProperty() null .

    如果只想打印路径,只需省略 电话:

    System.out.println(url.getPath());
    
        2
  •  0
  •   Stephen C    7 年前

    为什么第二次打印返回null?

    这不是找到主类路径的方法。

    您需要做的是:

    1. 获取类的完全限定(或规范)名称;例如

        String name = Main.class.getCanonicalName();
      
    2. 将其映射到“.class”文件的资源路径。您需要:

      • 将全名中的所有“.”字符替换为“/”,然后
      • 附加“.class”。
    3. getResource(resourcePath) 查找 URL

    如果生成的URL是“文件:”URL,则可以使用 URL::toFile() 获取文件系统中的路径名。

    但是,如果URL是“jar:”URL(就像从jar文件加载类一样),则该类将没有文件系统路径名。


    注意 getClassLoader().getResource("")


    如果您想要调用 static void main(String[]) StackWalker javadoc ). 我认为,您需要使用该选项来显示隐藏的帧。