一个简单的递归程序,它读取给定目录下所有文件,然后以树型的方式在屏幕上打印出来.昨天断断续续得花了1个多小时写出来读取文件 package test; import java.io. * ; import java.util. * ; /** */ /** * Put files into a tree * */ public class ReadFilesAndBuiltTree { static class Node { private Node father; private List children; private File data; public Node() { children = new Vector(); } public File getData() { return data; } public void addChild(Node c) { this .getChildren().add(c); } public void setData(File data) { this .data = data; } public List getChildren() { return children; } public void setChildren(List children) { this .children = children; } public Node getFather() { return father; } public void setFather(Node father) { this .father = father; } public boolean hasChildren() { return children.size() > 0 ; } public Node getChile( int index) { return (Node)children.get(index); } public Node getChild(String fname) { Iterator i = getChildren().iterator(); while (i.hasNext()) { Node bn = (Node)i.next(); String n = bn.getData().getName(); if (n.equals(fname)) return bn; } return null ; } public List getDirChildren() { List c = new Vector(); for ( int i = 0 ; i < children.size();i ++ ) { Node n = (Node)children.get(i); if ( n.getData().isDirectory() )c.add(n); } return c; } public List getFileChildren() { List c = new Vector(); for ( int i = 0 ; i < children.size();i ++ ) { Node n = (Node)children.get(i); if ( ! n.getData().isDirectory() )c.add(n); } return c; } } private ReadFilesAndBuiltTree() {} public static Node getTree(File rootDir) { Node r = new Node(); r.setData(rootDir); return new ReadFilesAndBuiltTree().builtTree(r); } private Node builtTree(Node root) { if ( ! root.getData().isDirectory()) return root; File f = root.getData(); File[] fs = f.listFiles(); for ( int i = 0 ; i < fs.length ; i ++ ) { File ff = fs[i]; Node n = new Node(); n.setData(ff); n.setFather(root); root.addChild(builtTree(n)); } return root; } public static void main(String[] args) throws Exception { Node root = getTree( new File(ShowFileDir.ROOT_DIR)); Node cn = root.getChild( " maps " ); System.out.println(cn.getChildren().size()); } } 输出文件 package test; import java.io.File; import java.util.Iterator; import java.util.List; import test.ReadFilesAndBuiltTree.Node; /** */ /** * Print the tree to screen * */ public class ShowFileDir { public static String ROOT_DIR = "E:/y音乐"; public ShowFileDir(){ } public void printNodes(){ Node root = ReadFilesAndBuiltTree.getTree(new File(ROOT_DIR)); printNode(root,0); } private void printNode(Node root,int depth){ if(!root.hasChildren())return; pd(root.getData().getName(),depth); pindent(++depth); List l = root.getFileChildren(); pc(l,depth); l = root.getDirChildren(); for(int i = 0 ; i < l.size() ; i++){ Node c = (Node)l.get(i); printNode(c,depth); } } // Screen methods private void pc(List l,int count){ Iterator i = l.iterator(); while(i.hasNext()){ Node n = (Node)i.next(); pp(count); p("+"+n.getData().getName()+"\n"); } }