比方说我有这个场景
C:\ Users \用户名称\文件\工作区\项目\ SRC \的COM \名称\ Foo.java
Public class Foo {
public Foo() {
Bar b = new Bar();
b.method();
}
}
然后假设类Bar位于一个用作库的.JAR文件中,是否有可能找出调用method()的类所在的位置? (在这种情况下,Foo类)
我已经对Google进行了一些调查,找不到任何东西,这段代码肯定会简化我的库。
答案 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")
获取已编译类文件的位置。问题是,这将如何帮助您简化库?