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

2022-08-31 13:41:22

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()


答案 1

Path 上使用解析方法。

有两种方法具有此名称。一个取一个亲戚,另一个拿一个.它使用调用它的 父级,并适当地附加 或 相对。PathStringPathStringPath

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

答案 2

对于发现此问题仅专门查找指定路径内的文件的任何人,您必须注意路径遍历攻击。

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

推荐