我似乎找不到解決方案。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