Java从堆栈跟踪获取文件的绝对路径

Java从堆栈跟踪获取文件的绝对路径,java,debugging,stdout,Java,Debugging,Stdout,我有一个Java打印堆栈跟踪函数,用于调试 private static void printError(String message, Significance severityLevel, int stackTraceStart) { final String thread_name = Thread.currentThread().getName(); final String location_of_print_statement = Thread.currentThre

我有一个Java打印堆栈跟踪函数,用于调试

private static void printError(String message, Significance severityLevel, int stackTraceStart) {
    final String thread_name = Thread.currentThread().getName();
    final String location_of_print_statement = Thread.currentThread().getStackTrace()[stackTraceStart].toString();
    Package_Private.printLineToReadout("\n" + "Thread \"" + thread_name + "\": "
            + location_of_print_statement + "\n" + message, ReadoutCondition.BAD, severityLevel);
}
问题是它只打印“modules.ShopModule.configure(ShopModule.scala:8)”


我希望它打印该文件的整个路径,而不是相对路径。

有点晚了,但可能对其他人有用。 您可以使用类加载器来搜索对应于特定类文件的资源

导入静态java.lang.System.out;
导入java.util.array;
导入java.net.URL;
公共级Abs{
公共静态void main(字符串[]args){
Arrays.asList(Thread.currentThread().getStackTrace()).stream().forEach(e->{
字符串cn=e.getClassName().replace('.','/')+“.class”;
URL u=new Abs().getClass().getClassLoader().getResource(cn);
out.println(“+u.toString().replace(“.class”,“.java”)+”:“+e.getLineNumber());
});
}
}

这里也有类似的讨论:在这里相对路径是好的;除文件名之外的任何路径。