3 回答
TA贡献1829条经验 获得超4个赞
简单地说:没有好的(内置)方法可以实现这一目标。
你看,当你看:
myProjectName/src/com/company/Class1
只有包名 com.company.Class1 在运行时可见。Java 语言中绝对没有涵盖该myProjectName
部分的概念。
换句话说:该名称是元信息。是的,Carlos 的答案为您提供了一种访问方法,但我仍然认为这更像是一种破解而不是解决方案。
一个更好的方法:简单地创建一个类ProjectInfo
,或者可能ComponentInfo
包含这样的信息。
含义:不要依赖文件系统名称。如果您有属于项目/组件/单元/...的东西,那么将该“概念”作为源代码的一部分。ProtectionDomain
和CodeSource
类的意图更多是关于安全性之类的。它并不意味着像“项目名称”这样的元信息的“容器”。
TA贡献1842条经验 获得超21个赞
刚找到,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)
添加回答
举报