Asides от того пути, не может существовать (и canonicalisation не удастся), это выглядит как разумный подход, который должен работать в прямом случае.
Возможно, вы захотите взглянуть на вызов getParentFile() на «возможно, дочернем» в цикле, если он соответствует родительскому элементу на каждом шаге. Вы также можете закоротить сравнение, если родительский объект не является (реальным) каталогом.
Возможно, что-то вроде следующего:
boolean myCheck(File maybeChild, File possibleParent) throws IOException
{
final File parent = possibleParent.getCanonicalFile();
if (!parent.exists() || !parent.isDirectory()) {
// this cannot possibly be the parent
return false;
}
File child = maybeChild.getCanonicalFile();
while (child != null) {
if (child.equals(parent)) {
return true;
}
child = child.getParentFile();
}
// No match found, and we've hit the root directory
return false;
}
Обратите внимание, что если вы хотите, чтобы отношения ребенка быть строгой (т.е. каталог не ребенок сам по себе), вы можете изменить начальное child
назначение на линии 9 - child.getParentFile()
, поэтому первая проверка происходит в директории, содержащей дочерний элемент.
ли этот пример требует файловой системы ввода-вывода на всех? – user2586917
Возможный дубликат [Java: проверьте, является ли путь родителем файла] (http://stackoverflow.com/questions/28698125/java-check-if-path-is-parent-of-a-file) – Suma
@Suma : Вопрос, который вы связали, является _duplicate_ этого. – Jayan