我似乎找不到解决方案。Java:检查路径是否为文件的父亲
我有两个路径,如:
D:/Views/me/a.b
和 D:/Views/me/a
或
D:/Views/me/a.b
和 D:/Views/me/a.b/x/y
我必须确保,一个文件/目录是不是一个孩子另一个。 我试过Contains
,但在这种情况下它不适用于我?
我似乎找不到解决方案。Java:检查路径是否为文件的父亲
我有两个路径,如:
D:/Views/me/a.b
和 D:/Views/me/a
或
D:/Views/me/a.b
和 D:/Views/me/a.b/x/y
我必须确保,一个文件/目录是不是一个孩子另一个。 我试过Contains
,但在这种情况下它不适用于我?
尝试使用字符串startsWith API:
String str1 = "D:/Views/me/a.b";
String str2 = "D:/Views/me/a";
if (str1.startsWith(str2 + ".") || str1.startsWith(str2 + "/")) {
System.out.println("Yes it is");
}
str1 = "D:/Views/me/a/c/d";
str2 = "D:/Views/me/a";
if (str1.startsWith(str2 + ".") || str1.startsWith(str2 + "/")) {
System.out.println("Yes it is");
}
Output:
Yes it is
Yes it is
String path = "D:/Views/me/a.b";
String path2 = "D:/Views/me/a";
File file = new File(path);
if(file.getParentFile().getAbsolutePath().equals("path2")){
System.out.println("file is parent");
}else{
System.out.println("file is not parent");
}
@Kenster有问题**,我必须确保,一个文件/目录不是另一个的孩子** 我只是想让他知道如何处理父文件而不是复制过去的代码 – Pravin 2015-02-24 14:42:56
我觉得Path和Paths从java.nio.file可以在这里有用的(如果你有至少Java 7中)。
public static void main(String[] args) {
Path p1 = Paths.get("D:/Views/me/a.b");
Path p2 = Paths.get("D:/Views/me/a");
System.out.println(isChild(p1, p2));
System.out.println(isChild(p2, p1));
Path p3 = Paths.get("D:/Views/me/a.b");
Path p4 = Paths.get("D:/Views/me/a.b/x/y");
System.out.println(isChild(p3, p4));
System.out.println(isChild(p4, p3));
}
//Check if childCandidate is child of path
public static boolean isChild(Path path, Path childCandidate) {
return childCandidate.startsWith(path);
}
你可能会考虑根据自己的需要在检查之前的路径使用toAbsolutePath()或toRealPath()。
这是官方的Java教程Path Operations。
可能的重复[如何检查给定的路径是否可能是另一个路径的子节点?](http://stackoverflow.com/questions/4746671/how-to-check-if-a-given-path-is -possible-child-of-another-path) – Jayan 2017-02-10 11:39:14