如何在Java 7的java.nio.file.Path中访问子文件/文件夹?

75
Java 7引入了java.nio.file.Path作为java.io.File的可能替代品
使用File时,当我访问特定目录下的文件时,我会这样做:
File parent = new File("c:\\tmp");
File child = new File(parent, "child"); // this accesses c:\tmp\child

如何使用Path完成这个任务?

我想这个方法会起作用:

Path parent = Paths.get("c:\\tmp");
Path child = Paths.get(parent.toString(), "child");

但是调用parent.toString()看起来很丑陋。有更好的方法吗?

2个回答

109

使用Path上的resolve方法。

这个名称有两种方法。One接受一个相对路径Paththe other接受一个String。它使用调用它的Path作为父路径,并适当地附加String或相对Path

Path parent = Paths.get("c:\\tmp");
Path child = parent.resolve("child");

但是这种方法使用路径解析,可能会引起安全问题。 - Ryan Leach

0
对于任何找到这个问题并且仅关注特定路径内文件的人来说,你必须注意遍历攻击。
请参考: Java(或Scala)中过滤向上路径遍历 非常重要的是,您必须检查该路径是否以根路径开始。
Path parent = Paths.get("C:\\tmp");
Path child = parent.resolve("chlid").normalize();
if (!child.startsWith(parent)) {
    throw new IllegalArgumentException("Potential Path Traversal Attack");
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接