【问题标题】:Possible to get the file-path of the class that called a method in Java?可以获取在 Java 中调用方法的类的文件路径吗?
【发布时间】:2014-12-27 17:39:57
【问题描述】:

假设我有这种情况

C:\Users\Name\Documents\Workspace\Project\Src\Com\Name\Foo.java

Public class Foo {

    public Foo() {
        Bar b = new Bar();
        b.method();
    }
}

然后假设类 Bar 位于用作库的 .JAR 文件中,是否有可能找出调用 method() 的类来自哪里? (在本例中为 Foo 类)

我在 Google 上进行了一些搜索,但找不到任何东西,而这段代码肯定会大大简化我的库。

【问题讨论】:

  • Foo.class.getResource("Foo.class")

标签: java file io path libraries


【解决方案1】:

如果您需要从方法 Bar#method 中获取调用者类文件的路径,那么您可以使用如下内容:

StackTraceElement[] stackTrace = new Throwable().getStackTrace();
String callerFilePath = getClass().getClassLoader().getResource(stackTrace[1].getClassName().replace('.', '/') + ".class"));

【讨论】:

    【解决方案2】:

    是的,您可以获取执行文件的路径。例如,您有文件: C:\Users\Name\Documents\Workspace\Project\Src\Com\Name\Foo.java

    编译后会变成: C:\Users\Name\Documents\Workspace\Project\Src\Com\Name\Foo.class

    你可以使用它来获取文件的目录:

    System.getProperty("user.dir");
    

    然后你可以将这个字符串添加到它:

    String cPath = System.getProperty("user.dir")+"\\Foo.class";
    

    因此,cPath 将是文件的完整路径。

    【讨论】:

    • 这不符合我的要求,如果我不清楚,对不起,我想获取调用该方法的类,所以如果 Jake.class 调用 Jim.class 中的方法,我想回到 Jake.class 的路径
    【解决方案3】:

    您可以使用Foo.class.getResource("Foo.class") 来获取已编译类文件的位置。问题是,这将如何帮助您简化库?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-18
      • 2013-06-22
      • 2014-12-13
      • 1970-01-01
      • 1970-01-01
      • 2010-09-13
      • 2016-03-25
      相关资源
      最近更新 更多