递归搜索自己的文件系统

时间:2017-12-24 06:20:09

标签: java recursion

我正在尝试搜索可以是文件或目录的FSElement,以查找其根目录为localroot目录的文件结构,然后继续尝试查找,但它不会返回我预期的结果。任何人都可以建议我在哪里错了。

private FSElement getTargetFromName(String targetName) throws CommandNotExecutedException {
            fsElement = localroot.getChildren();
            Iterator<FSElement> children = fsElement.iterator();
            while (children.hasNext()) {

                FSElement child = children.next();
                if (child.isDirectory()) {
                    if (child.getName().equals(targetName))
                        return child;
                    else {
                        localroot = (Directory) child;
                        return getTargetFromName(targetName);
                    }
                } else if (child.getName().equals(targetName))
                    return child;
            }
            throw new CommandNotExecutedException("Destination file/dir not found");
        }

1 个答案:

答案 0 :(得分:1)

您遇到的问题是,在搜索时,如果遇到与目标文件不匹配的文件,则会抛出错误。如果没有辅助方法,您将无法通过递归搜索抛出错误,而是可以执行此类操作。

这是完全未经测试的,但理论上应该可行。

    private FSElement getTargetFromName (FSElement root, String targetName) {
        Iterator<FSElement> children = root.iterator();
        while (children.hasNext()) {
            FSElement child = children.next();
            if (child.getName().equals(targetName)) {
                return child;
            } else if (child.isDirectory()) {
                FSElement searched = getTargetFromName(child, targetName);
                if (searched != null) {
                    return searched;
                }
            }
        }
        return null;
    }

如果您想让它抛出错误,您可以添加辅助方法,例如:

public FSElement getTargetFromName (String targetName) throws CommandNotExecutedException {
    FSElement file = getTargetFromName(localroot, targetName);
    if (file == null) {
        throw new CommandNotExecutedException("Destination file/dir not found");
    }
    return file;
}