2017-03-07 67 views
0

我嘗試創建一個小應用程序,它使用文件助手遞歸讀取文件系統指定位置的內容。我有這個代碼:爲什麼列表保持不變?

/* Imports here */ 

public class App { 

    private static Scanner inp; 
    public static List<Node> Tree = new ArrayList<Node>(); 

    public static void main(String[] args) { 
     String FFiles; 

     System.out.print("Enter root directory: "); 
     inp = new Scanner(System.in); 

     FileSystem fileSystem = FileSystems.getDefault(); 
     Path rootPath = fileSystem.getPath(inp.nextLine()); 

     FileVisitor<Path> simpleFileVisitor = new SimpleFileVisitor<Path>() { 
       public Path VisitedDirectory = rootPath; 
       public List<Node> files = new ArrayList<Node>(); 


       @Override 
       public FileVisitResult preVisitDirectory(Path dir,BasicFileAttributes attrs) throws IOException { 
       if (dir != VisitedDirectory) { 
        Node directory = new Node(dir.getFileName().toString(), "directory", files, dir.toString()); 
        files.add(directory); 
        Node VisDirectory = new Node(VisitedDirectory.getFileName().toString(), "directory", files, dir.toString()); 
        Tree.add(VisDirectory); 

        files.clear(); 
       } 
       return FileVisitResult.CONTINUE; 
       } 

       @Override 
       public FileVisitResult visitFile(Path visitedFile,BasicFileAttributes fileAttributes) throws IOException { 
       Node file = new Node(visitedFile.getFileName().toString(), "file", null, visitedFile.toString()); 
       files.add(file); 
       return FileVisitResult.CONTINUE; 
       } 
     }; 



     try { 
      Files.walkFileTree(rootPath, simpleFileVisitor); 
     } catch (IOException ioe) { 
      ioe.printStackTrace(); 
     } 

     for (Node n : Tree) { 
      System.out.println(n); 
     } 
    } 

而這裏的問題是:爲什麼它只讀取(顯示)目錄? P.S Node類是隻是一對夫婦的變量,並宣佈像這樣:

public class Node { 
    @Override 
    public String toString() { 
     return "Node [path=" + path + "]"; 
    } 

    public String name; 
    public String path; 
    public String type; 
    public List<Node> children = new ArrayList<Node>(); 
    public Node(String name, String type, List<Node> children, String path) { 
     this.name = name; 
     this.type = type; 
     this.children = children; 
     this.path = path; 
    } 
} 
+0

在visitFile方法中放置一個斷點。檢查執行命中它。另外在訪問目錄中添加樹列表。在訪問文件中,你沒有 – efekctive

回答

0

你正在一個大混亂與files名單。你只創建一個實例。因此,您的new Node(VisitedDirectory.getFileName().toString(), "directory", files, dir.toString())實際上並不複製文件列表,只是存儲引用。您的files.clear()調用將清除您擁有的所有文件列表。這就是爲什麼只有添加到Tree的節點才能存活。

請將Tree重命名爲小寫。這樣一個人認爲Tree.add()Tree類上調用靜態方法。

相關問題