3 回答

TA貢獻1829條經驗 獲得超4個贊
簡單地說:沒有好的(內置)方法可以實現這一目標。
你看,當你看:
myProjectName/src/com/company/Class1
只有包名 com.company.Class1 在運行時可見。Java 語言中絕對沒有涵蓋該myProjectName
部分的概念。
換句話說:該名稱是元信息。是的,Carlos 的答案為您提供了一種訪問方法,但我仍然認為這更像是一種破解而不是解決方案。
一個更好的方法:簡單地創建一個類ProjectInfo
,或者可能ComponentInfo
包含這樣的信息。
含義:不要依賴文件系統名稱。如果您有屬于項目/組件/單元/...的東西,那么將該“概念”作為源代碼的一部分。ProtectionDomain
和CodeSource
類的意圖更多是關于安全性之類的。它并不意味著像“項目名稱”這樣的元信息的“容器”。

TA貢獻1842條經驗 獲得超22個贊
剛找到,20年前做的。您可以使用以下命令獲取代碼所在的目錄:
getClass().getProtectionDomain().getCodeSource().getLocation()
這用于列出編譯后的代碼所在的 JAR。它也應該適用于文件系統。對于一些基本的字符串,路徑或URL雜耍,你應該能夠路徑的正確的組件分開。
另請注意,這是編譯代碼所在的位置,不一定是源代碼所在的位置,也就是說,主要不是項目名稱 - 這僅在開發時有效。另請閱讀 GhostCat 的回答!

TA貢獻1818條經驗 獲得超3個贊
到目前為止我所擁有的(但不是 100% 可靠)是:
String workingDir = System.getProperty("user.dir")
int indexOfSrcFolder = workingDir .indexOf("src")
String pathToProject = workingDir.substring(0, indexOfSrc)
添加回答
舉報