如何检查给定路径是否可能是另一个路径的子路径?

2022-08-31 17:49:59

我试图使用java查找给定路径是否可能是另一个路径的子路径。这两条路径可能都不存在。

Say 是 的可能子项。c:\Program Files\My Company\test\My Appc:\Program Files

目前我正在这样做

boolean myCheck(File maybeChild, File possibleParent)
{
    return maybeChild.getAbsolutePath().startsWith( possibleParent.getAbsolutePath());
}

答案 1

您也可以使用来更轻松地执行此操作。该方法似乎可以处理所有可能的情况。java.nio.file.Pathjava.nio.file.Path.startsWith

例:

private static void isChild(Path child, String parentText) {
    Path parent = Paths.get(parentText).toAbsolutePath();
    System.out.println(parentText + " = " + child.startsWith(parent));
}

public static void main(String[] args) {
    Path child = Paths.get("/FolderA/FolderB/File").toAbsolutePath();
    isChild(child, "/FolderA/FolderB/File");
    isChild(child, "/FolderA/FolderB/F");
    isChild(child, "/FolderA/FolderB");
    isChild(child, "/FolderA/Folder");
    isChild(child, "/FolderA");
    isChild(child, "/Folder");
    isChild(child, "/");
    isChild(child, "");
}

输出:

/FolderA/FolderB/File = true
/FolderA/FolderB/F = false
/FolderA/FolderB = true
/FolderA/Folder = false
/FolderA = true
/Folder = false
/ = true
 = false

如果需要更高的可靠性,可以使用 代替 。toRealPathtoAbsolutePath


答案 2
File parent = maybeChild.getParentFile();
while ( parent != null ) {
  if ( parent.equals( possibleParent ) )
    return true;
  parent = parent.getParentFile();
}
return false;