请解释一下,为什么当我运行这段代码时,一切都很好,我得到了我的课程的父目录:
URL dirUrl = PathsService.class.getResource("..");
当我运行此代码时:
URL dirUrl = PathsService.class.getResource("../..");
我在dirUrl中获得 null 。
我试着这样:
URL dirUrl = PathsService.class.getResource("..//..");
我在dirUrl中有一个 null 。
如何在Java中获取父/父/父...目录?
答案 0 :(得分:12)
通知:
也就是说,您可以尝试以下代码:
import java.nio.file.*;
...
Path path = Paths.get(PathsService.class.getResource(".").toURI());
System.out.println(path.getParent()); // <-- Parent directory
System.out.println(path.getParent().getParent()); // <-- Parent of parent directory
另请注意,上述技术可能适用于您的开发环境,但在“正确”部署应用程序时可能(并且可能会)产生意外结果。
答案 1 :(得分:4)
你得到的结果是完全正确的。
我认为你误解了class.getResource
的使用。
假设您在此程序包中包含com.test
和MyClass
。
此MyClass.class.getResource(".")
将为您提供正在执行的文件的位置。表示MyClass
的位置。
此MyClass.class.getResource("..")
将在您的包结构中升级1级。因此,这将返回目录test
的位置。
此MyClass.class.getResource("../..")
将进一步提高1级。因此,这将返回目录com
的位置。
现在,这个MyClass.class.getResource("../../..")
会尝试进一步提升1级,但由于没有包目录,这将返回 null 。
因此,class.getResource
不会超出已定义的包结构并开始访问您的计算机目录。这是不起作用的。这只会在 当前 类 包结构中进行搜索。