0

我有一些我无法弄清楚的问题。我正在使用简单模型实现的目录来模拟文件系统Directory.java

public class Directory  {

    public Directory(String name, List<Directory> directory) {
        this.name = name;
        this.directory = directory;
    }

    private String name;

    private List<Directory> directory;

我的问题是我必须将新目录添加到具有指定路径的现有目录中(例如 test/test2/newdir)。我试图使用递归,但它并没有解决我的问题,因为当我更改目标目录时,root 保持不变。有人可以帮帮我吗?

翁德雷

编辑:我的递归方法

private static Directory _digIn(Directory dir, List<String> path, int depth) {
        if (depth < path.size()) {
            if (dir.getDirectory() != null) {
                for (Directory d : dir.getDirectory()) {
                    if (d.getName().equalsIgnoreCase(path.get(depth))) {
                        return _digIn(d, path, ++depth);
                    }
                }
            }
        } else {
            return dir;
        }
        return null;
    }

此方法返回我所需的目录,我可以向其中添加新目录,但此更改不会反映在根目录中。

EDIT2:我的插入方法

public static void insertNewObject(Directory dirToSave, List<String> path) {
        Root root = getRoot(xmlFile);
        Directory dir = _digIn(root.toDir(), path, 0);
        if (dir.getDirectory() != null) {
            dir.getDirectory().add(dirToSave);
        } else {
            List<Directory> dirList = new ArrayList<>();
            dirList.add(dirToSave);
            dir.setDirectory(dirList);
        }
    }
4

1 回答 1

1

问题是,当您进行root.toDir()调用时,您很可能会创建一个 Directory对象,它是一个不同的对象,因此对此所做的所有更改Directory都不会反映在root.

我会提出两个选项来解决这个问题:

1.让你的Root持有最高Directory

    class Root{
        Directory rootDir;
        public Directory toDir(){
            return rootDir;
        }
    }

这将为您返回一个对Directory存储在其中的对象的引用root,因此当您执行插入方法时,这Directory将被更改并且更改将反映在root

2.创建一个Directory.createRoot()可以给你一个新root元素的方法。

在这种情况下,您可以使用root.toDir()仍会返回最顶层Directory( dir) 的当前方法。在你调用它的插入方法之后,只需执行一个root = dir.createRoot();这很可能会给你一个新root的关于目录结构的最新数据。

于 2012-11-27T13:01:26.127 回答