可以获取在Java中调用方法的类的文件路径吗?

时间:2014-10-31 11:49:01

标签: java file io path libraries

比方说我有这个场景

  

C:\ Users \用户名称\文件\工作区\项目\ SRC \的COM \名称\ Foo.java

Public class Foo {

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

然后假设类Bar位于一个用作库的.JAR文件中,是否有可能找出调用method()的类所在的位置? (在这种情况下,Foo类)

我已经对Google进行了一些调查,找不到任何东西,这段代码肯定会简化我的库。

3 个答案:

答案 0 :(得分:3)

如果你需要从方法Bar#方法中获取调用者类文件的路径,那么你可以使用这样的东西:

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

答案 1 :(得分:0)

是的,您可以从文件执行的路径获取路径。例如,您有以下文件: 的 C:\ Users \用户名称\文件\工作区\项目\ SRC \的COM \名称\ Foo.java

编译后,它将变为: 的 C:\ Users \用户名称\文件\工作区\项目\ SRC \的COM \名称\让Foo.class

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

System.getProperty("user.dir");

然后你可以将它添加到它:

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

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

答案 2 :(得分:0)

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