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

Java7将 文件路径作为 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()似乎很丑陋。有更好的办法吗?

26699 次浏览

Path上使用 resolve方法。

有两个具有此名称的方法。采用相对 Path另一个采用相对 String。它使用作为父级调用的 Path,并适当地附加 String或相对 Path

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

对于只查找指定路径内的文件的 特别是查找此问题的任何人,您必须了解路径遍历攻击。

见: 在 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");
}