2015-02-24 26 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

相關問題