Java中的父父目录

时间:2013-05-27 09:41:15

标签: java file directory

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

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

当我运行此代码时:

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

我在dirUrl中获得 null

我试着这样: URL dirUrl = PathsService.class.getResource("..//..");我在dirUrl中有一个 null

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

2 个答案:

答案 0 :(得分:12)

通知

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

    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.testMyClass

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

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

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

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

因此,class.getResource不会超出已定义的包结构并开始访问您的计算机目录。这是不起作用的。这只会在 当前 包结构中进行搜索。