如何获取.java文件的绝对物理路径?

时间:2015-11-30 20:27:27

标签: java file reflection

我没有尝试获取工作目录或.class文件路径,而是想要运行的源代码的路径。

等等 “C:\工作区\项目名... \ SRC \测试\的java ... \ MyFile.java”

有什么想法吗?

编辑:SO上有答案告诉我们如何获取生成的.class文件的绝对路径。这个问题的目的是知道是否有办法动态获取原始源文件(.java文件)的位置。 感谢。

1 个答案:

答案 0 :(得分:0)

“.class”文件中存在一个可选属性,它提供源Java文件的文件名(而不是路径名)。 JVM spec 4.7.10

规范说:

  

“sourcefile_index项目引用的字符串将被解释为指示从中编译此类文件的源文件的名称。它不会被解释为指示包含该文件的目录的名称或绝对路径名称对于该文件;在实际使用文件名时,运行时解释器或开发工具必须提供此类特定于平台的附加信息。“

java.lang.Class不公开此属性,但是如果您可以(某种方式)安排在类的方法在堆栈上时实例化异常,则源文件名可能 em>通过调用StackTraceElement.getFileName()来获取...以javadoc中的免责声明为模。

或者,如果您可以找到类文件,则应该可以对其进行解码并提取源文件名。 (您应该能够找到现有的第三方库来进行解码/提取。)

<强>无论其

  • 如上所述,你得到的是一个简单的文件名,而不是路径名。
  • 名称不一定是真正的文件名。它可能是包含源的存储库/数据库中某些内容的名称。 (根据javadoc免责声明。)
  • 该属性是可选,这意味着它可能根本不存在。

所有这一切都加起来:你可能应该找到另一种方法去做你想做的事情。