将两个给定的文件路径视为字符串:
/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}}完全正确的行为。
答案 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
,使您可以测试两条路径是否相等。
使用startsWith
和endsWith
方法可以测试路径是以特定字符串开头还是结尾。
这些方法易于使用。例如:
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"
}