`
zqc53
  • 浏览: 25464 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

算法1 : 递归

阅读更多

一个简单的递归程序,它读取给定目录下所有文件,然后以树型的方式在屏幕上打印出来.昨天断断续续得花了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");
        }

    }

    
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics