java 组合设计模式(目录&文件)

标签 java

下面的输出是不同的。我不知道哪里出了问题,我已经多次尝试纠正。 有File和Folder两个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();
    }
}  

文件夹.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 Parent, String name)。根(最顶层)文件夹将 null 作为父文件夹。

当您打印名称时,您需要询问当前文件夹的路径。此方法的代码为:

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

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

关于java 组合设计模式(目录&文件),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27108326/

相关文章:

java - 从 Java 中的未知 Groovy 类访问字段

java - Apache Camel - Kafka 组件 - 单生产者多消费者

java - 如何从 JSON 创建 Mongoose 模式

java - 如何解决错误? Swing 按钮重画

java - 这是内存泄漏还是误报?

java - 无法在j2me应用程序中使用图像

java - 执行 Selenium 测试自动化的前端

java - 生成约会(日期)

java - 在两个不同的java文件中存在相同的类名问题

java - 呈现组件特定错误消息的最佳方式是什么?