比较两个文件路径

时间:2016-09-02 07:12:22

标签: java filepath

将两个给定的文件路径视为字符串:

/path/to/dir/path/to/dir/file

在Java中,如果后面的文件路径代表磁盘上的真实文件,那么如何测试,该文件低于或等于第一个字符串所代表的目录。这里有一些例子来澄清这一点,包括一个检查函数的一些样本返回值,这里有一个问题:

/path/to/dir /path/to/dir            (true)     
/path/to/dir /path/to/dir/file       (true)
/path/to/dir /path                   (false)
/path/to/dir /path/to/dir/../../file (false)
/path/to/dir file                    (false)
/path/to/dir /path/to/dir/dir2/../   (true)

是否可以通过File方法.getCanonicalPath删除点,然后检查字符串级别?也许有更好的方法。我无法找到File的{​​{1}}完全正确的行为。

3 个答案:

答案 0 :(得分:3)

请使用本机路径操作。字符串操作可能由于错误处理路径分隔符等而引入错误等。

Path path1 = Paths.get("/home").normalize();
Path path2 = Paths.get("/home/user/filename").normalize();

path2.startsWith(path1);

答案 1 :(得分:1)

如果你有规范路径,你可以这样做:

String path1 = "/path/to/dir"
String path2 = "/path/to/dir/file"

path2.beginsWith(path1);

这个结果将是您的答案

答案 2 :(得分:0)

Path类支持equals,使您可以测试两条路径是否相等。

使用startsWithendsWith方法可以测试路径是以特定字符串开头还是结尾。

这些方法易于使用。例如:

Path path = ...;
Path otherPath = ...;
Path beginning = Paths.get("/home");
Path ending = Paths.get("foo");

if (path.equals(otherPath)) {
    // equality logic here
} else if (path.startsWith(beginning)) {
    // path begins with "/home"
} else if (path.endsWith(ending)) {
    // path ends with "foo"
}