2015-02-24 66 views
0

我似乎找不到解决方案。Java:检查路径是否为文件的父亲

我有两个路径,如:

D:/Views/me/a.bD:/Views/me/a

D:/Views/me/a.bD:/Views/me/a.b/x/y

我必须确保,一个文件/目录是不是一个孩子另一个。 我试过Contains,但在这种情况下它不适用于我?

+1

可能的重复[如何检查给定的路径是否可能是另一个路径的子节点?](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

回答

1

尝试使用字符串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 
+0

第一个示例的输出显示为false :)。我替换了“。”与“/”和它的作品。非常感谢你!!! – MarryS 2015-02-24 14:32:25

+0

'str1.startsWith(str2 +“。”)'部分对我来说没有意义。为什么在那里? “D:/ Views/me/ab”不是“D:/ Views/me/a”的孩子, – Suma 2017-02-09 21:04:50

1
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"); 
    } 
+0

@Kenster有问题**,我必须确保,一个文件/目录不是另一个的孩子** 我只是想让他知道如何处理父文件而不是复制过去的代码 – Pravin 2015-02-24 14:42:56

2

我觉得PathPaths从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

相关问题