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) を持つ既存のディレクトリに新しいディレクトリを追加する必要があることです。再帰を使用しようとしましたが、宛先ディレクトリを変更したときにルートが変更されていないため、問題は解決しません。誰でも私を助けてくれますか?

オンドレイ

編集:私の再帰的方法

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()呼び出しを行うときに、別のオブジェクトであるnew Directoryを作成する可能性が高いため、これに加えられたすべての変更が にDirectory反映されないことrootです。

これを解決するには、次の 2 つのオプションを提案します。

1.Rootホールドを一番上にしDirectoryます。

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

Directoryこれにより、内部に格納されているオブジェクトへの参照が返されるrootため、挿入メソッドを実行すると、これDirectoryが変更され、変更がroot

2.新しい要素Directory.createRoot()を与えるメソッドを作成します。root

この場合、最上位( )root.toDir()を返す現在のメソッドを使用できます。その上で挿入メソッドを呼び出した後、単にこれを実行すると、ディレクトリ構造に関する最新のデータを含む新しいデータが得られる可能性があります。Directorydirroot = dir.createRoot();root

于 2012-11-27T13:01:26.127 に答える