簡體   English   中英

java復合設計模式(目錄和文件)

[英]java Composite design pattern(Directory &File)

以下輸出是不同的。 我不知道怎么了,我已經嘗試了很多次。 有兩個文件和文件夾Java文件。對於格式,對於列出的文件夾,末尾必須有一個“ /”,對於每個文件夾/文件,路徑必須是絕對路徑。

輸出必須是

dir1/
dir1/f1/
dir1/dir2/
dir1/dir2/f3/
dir1/dir2/f4/
dir1/dir2/dir3/
dir1/dir2/dir3/f5/
dir1/f2/

但是,我的輸出是

dir1/
dir1/f1/
dir1/dir2/
dir2/f3/
dir2/f4/
dir2/dir3/
dir3/f5/
dir1/f2/

這是我的代碼。

public class File implements Composite {
    public String name;
    //private ArrayList<File>a=new ArrayList<File>();


    public File(String name)
    {
        this.name=name;
    }


    public void list() {

        System.out.print(name+"/");
       System.out.println();
    }
}  

Folder.java

import java.util.ArrayList;

public class Folder implements Composite{
    public String name;
    public ArrayList b = new ArrayList();

    public Folder(String name){
        this.name=name;
    }

    public void add(Object o) 
    {

        b.add(o);
    }

    public void list(){
           int e=b.indexOf(name)+1;
           System.out.println(name+"/");
           Composite r=(Composite) b.get(e); 
           for(int i=0;i<b.size();i++) {

               System.out.print(name+"/");



               Composite a=(Composite)b.get(i);

               a.list();
           }

    }

    public String getName(){
        return name;
    }
}

在您的代碼中,您需要跟蹤每個Folder的父文件Folder

因此,構造函數必須為Folder(Folder parent, String name) 根(最頂層)文件夾的父級為null

打印名稱時,需要詢問當前文件夾的路徑。 該方法的代碼為:

 public String getPath() {
     if(null == parent) return name;

     return parent.getPath() + "/" + name;
 }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM