5

请解释一下,为什么当我运行这段代码时,一切都很好,我得到了我的类的父目录:

URL dirUrl = PathsService.class.getResource("..");

当我运行这段代码时:

URL dirUrl = PathsService.class.getResource("../..");

我在 dirUrl 中得到空值。

我尝试这样: URL dirUrl = PathsService.class.getResource("..//..");同样,我在 dirUrl 中有一个空值。

如何在 Java 中获取 parent/parent/parent ... 目录?

4

2 回答 2

12

注意

  1. 正如其他人已经说过的那样,基于检索某些父目录的任何功能是一个非常糟糕的设计理念(而且几乎肯定会失败)。
  2. 如果您分享有关您要实现的目标的更多细节(大图),有人可能会提出更好的解决方案。

也就是说,您可以尝试以下代码:

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

另请注意,上述技术可能适用于您的开发环境,但可能(并且可能会)在您的应用程序“正确”部署时产生意想不到的结果。

于 2013-05-27T10:21:38.520 回答
6

你得到的结果是完全正确的。

我想你误解了class.getResource.

假设您有包裹com.testMyClass在此包裹内。

MyClass.class.getResource(".")将为您提供正在执行的文件的位置。表示 的位置MyClass

MyClass.class.getResource("..")将在您的包结构中提升 1 级。因此,这将返回目录的位置test

MyClass.class.getResource("../..")将进一步提升 1 级。因此,这将返回目录的位置com

现在,这MyClass.class.getResource("../../..")将尝试进一步提升 1 级,但由于不存在包目录,这将返回null

所以,class.getResource不会跳出定义的包结构而开始访问你的电脑目录。这是行不通的。这仅在您当前的 包结构中搜索。

于 2013-05-27T10:23:48.353 回答