2015-02-09 2 views
1

Вся эта программа пытается добиться того, чтобы файлы списков, а также папки были правильно настроены, так что папкам присваиваются собственные списки объектов. Файлы исключены из списка объектов, поскольку они не будут содержать никаких файлы или папки внутри себя. Моя главная проблема заключается в том, что объекты, которые рекурсивно читаются и записываются в data.class, что объекты из основного или, скорее, «root», не все соединены в один последовательный список объектов в конце , Пожалуйста помоги.Как я могу пройти назад и добавить объект в список объектов, который я создал в предыдущих циклах моего рекурсивного метода?

package bstTest2; 
import java.io.*; 
public class Main { 
    public static void main(String[] args) { 
     String filename = "G:/a"; 
     File f = new File(filename);   

     data d= new data(); 
     d.explore(f); 
    } 
} 

package bstTest2; 
import java.io.File; 
import java.util.LinkedList; 
import java.util.List; 

public class Node{ 
    private String filename; 
    private long size; 
    private List<Node> prevList; 
    private List<Node> curList; 
    private List<Node> chList;//child list of the current node - could be null if the node is a file 
    private List<Node> root; 

    Node(String fn, long s,List<Node> previousList, List<Node> currentList,List<Node> childList){ 
     filename = fn; 
     size = s; 
     setPrevList(previousList); 
     setCurList(currentList); 
     setChList(childList); 
    } 

    public Node() { 
     initList(); 
    } 

    public void initList(){ 
     curList = new LinkedList<Node>(); 
     setRoot(curList); 
    } 

    public void createNode(File file){ 
     curList.add(new Node(file.getName(),file.length(),null,curList,null)); 
    } 


    public void createNodeList(File file){ 
     curList.add(new Node(file.getName(),file.length(), 
      prevList, 
     setCurList(chList), setChList(setCurList(new LinkedList<Node>())))); 
    } 


    public List<Node> getChList() { 
     return chList; 
    } 

    public List<Node> setChList(List<Node> chList) { 
     this.chList = chList; 
     return chList; 
    } 

    public List<Node> getCurList() { 
     return curList; 
    } 

    public List<Node> setCurList(List<Node> curList) { 
     this.curList = curList; 
     return curList; 
    } 

    public List<Node> getRoot() { 
     return root; 
    } 

    public void setRoot(List<Node> root) { 
     this.root = root; 
    } 

    public List<Node> getPrevList() { 
     return prevList; 
    } 

    public void setPrevList(List<Node> prevList) { 
     this.prevList = prevList; 
    } 
} 

package bstTest2; 
import java.io.File; 
import java.util.*; 
public class data { 

    private Node node = new Node(); 
    private File f[]; 

    public void explore(File dir){ 
     f=dir.listFiles(); 
     if(f!=null){ 
      for(File file:f){ 
       if(!file.isDirectory()){  


         //System.out.println("BFIL"+node.getCurList()); 
         System.out.println("FILE: "+file.getName()+" "+file.length() +":"); 

         node.createNode(file); 

         System.out.println(node.getCurList().size()+" AFIL"+node.getCurList()); 
       }else{ 


         //System.out.println("BFOL"+node.getCurList()); 

         System.out.println("FOLDER: "+file.getName()+" "+file.length() +":"); 

         node.createNodeList(file); 

         System.out.println(node.getCurList().size() +" AFOL"+node.getCurList()); 

         explore(file); 
       } 

      } 

     } 

    } 
} 

ответ

1

Вы можете вернуть список файлов, содержащихся в каталоге. Это позволит вам добавить этот список файлов в узел каталога.

Для этого вы должны изменить свой метод expore(File dir), чтобы вернуть список узлов в каталог, и вы бы обновили свой вызов explore(file);, чтобы добавить этот список в узел каталога.

public List<Node> explore(File directory) { 
    List<Node> result = new ArrayList<Node>(); 

    for (File current : directory.listFiles()) { 
     Node node = toNode(current); 
     // do the real work here 

     if (file.isDirectory()) { 
      node.setChildren(explore(file)); 
     } 

     result.add(node); 
    } 

    return result; 
} 

Альтернативой передать узел каталога методу explore(File dir) и обновлять его в рамках этого метода. Затем вы можете добавить каждый содержащийся файл или узел каталога к этому родительскому узлу.

public void explore(File directory, Node parent) { 
    for (File current : directory.listFiles()) { 
     Node node = toNode(current); 
     // do the real work here 

     if (file.isDirectory()) { 
      explore(file, node); 
     } 

     parent.add(node); 
    } 
} 
+0

Вы могли бы реализовать это с помощью кода? Я не могу понять, что вы имеете в виду. –

+0

Я дам вам пример кода. Код, который вы предоставили, достаточно подробен, чтобы четко показать, о чем я говорю. –

+0

Спасибо, и жаль, что я только программировал в java около 3 лет. –

Смежные вопросы