簡體   English   中英

如何獲取.java文件的絕對物理路徑?

[英]How to get absolute physical path of .java file?

我不是要獲取工作目錄或 .class 文件路徑,而是想要正在運行的源代碼的路徑。

類似於“C:\\Workspace\\ProjectName...\\src\\test\\java...\\MyFile.java”

有任何想法嗎?

編輯:SO上有答案告訴如何獲取生成的.class文件的絕對路徑,這個問題的目的是知道是否有辦法動態獲取原始源文件(.java文件)的位置。 謝謝。

“.class”文件中存儲了一個可選屬性,該屬性提供源 Java 文件的文件名(不是路徑名)。 JVM 規范 4.7.10

規范說:

"sourcefile_index 項引用的字符串將被解釋為指示編譯此類文件的源文件的名稱。它不會被解釋為指示包含文件的目錄名稱或文件的絕對路徑名; 此類特定於平台的附加信息必須在實際使用文件名時由運行時解釋器或開發工具提供。”

此屬性不被暴露java.lang.Class ,但是如果能(以某種方式)安排一個例外,被實例化,而類的方法是在堆棧中,源文件名可以是獲得通過調用StackTraceElement.getFileName() ...以javadoc 中的免責聲明為模。

或者,如果您可以找到類文件,則應該可以對其進行解碼並提取源文件名。 (您應該能夠找到現有的第 3 方庫來進行解碼/提取。)

但是

  • 如上所述,您得到的是一個簡單的文件名,而不是路徑名。
  • 該名稱不一定是真正的文件名。 它可能是包含源的存儲庫/數據庫中某些內容的名稱。 (根據 javadoc 免責聲明。)
  • 該屬性是可選的,這意味着它可能根本不存在。

所有這些加起來就是:您可能應該找到另一種方法來做您想做的任何事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM