Java递归

Java遍历文件夹的2种方法:

A.不使用递归:

import java.io.File;
import java.util.LinkedList;
public class FileSystem {
    public static void main(String[] args) {
        long a = System.currentTimeMillis();
        LinkedList list = new LinkedList();
        File dir = new File("c://java//");
        File file[] = dir.listFiles();
        for (int i = 0; i < file.length; i++) {
            if (file[i].isDirectory())
                list.add(file[i]);
            else
                System.out.println(file[i].getAbsolutePath());
        }
        File tmp;
        while (!list.isEmpty()) {
            tmp = list.removeFirst();
            if (tmp.isDirectory()) {
                file = tmp.listFiles();
                if (file == null)
                    continue;
                for (int i = 0; i < file.length; i++) {
                    if (file[i].isDirectory())
                        list.add(file[i]);
                    else
                        System.out.println(file[i].getAbsolutePath());
                }
            } else {
                System.out.println(tmp.getAbsolutePath());
            }
        }
        System.out.println(System.currentTimeMillis() - a);
    }
}
B.使用递归:
import java.io.File;
import java.util.ArrayList;
public class FileSystem1 {
    private static ArrayList filelist = new ArrayList(); 
    public static void main(String[] args) {
        long a = System.currentTimeMillis();
        refreshFileList("c://java");
        System.out.println(System.currentTimeMillis() - a);
    }
    public static void refreshFileList(String strPath) { 
        File dir = new File(strPath); 
        File[] files = dir.listFiles(); 
        if (files == null) 
            return; 
        for (int i = 0; i < files.length; i++) { 
            if (files[i].isDirectory()) { 
                refreshFileList(files[i].getAbsolutePath()); 
            } else { 
                String strFileName = files[i].getAbsolutePath().toLowerCase();
                System.out.println("---"+strFileName);
                filelist.add(files[i].getAbsolutePath());                    
            } 
        } 
    }
}

结论:经过测试,使用递归的方法B性能相对好一些。

 

递归生成XML字符串

/**
*
**/
package com.css.yj.res.util.common;

import java.util.Iterator;
import java.util.List;

import com.css.yj.res.resListManage.model.DmSxlxBO;
import com.css.yj.res.util.model.XzqhVO;

public class XlToXML {
   /**
* <p>
* 功能说明:将下拉属性实体集合转换成XML 要求:列表集合元素必须按照树形结构放置
* </p>
*
* @param zyxl
*            树list
* @return String
* @throws
*/
public static String getTreeXML(List zyxl, String treeName) {
   StringBuffer buf = new StringBuffer(
     "<?xml version=/"1.0/" encoding=/"UTF-8/"?>");
   buf.append("<navi>");
   buf.append("<navi treeName=/"");
   buf.append(treeName);
   buf.append("/">");
   // 循环树节点,null表示循环第一层
   buf.append(getListToXML(zyxl, null));
   buf.append("</navi>");
   buf.append("</navi>");
   return buf.toString();
}

/**
* <p>
* 功能说明:将下拉属性实体集合转换成XML 要求:列表集合元素必须按照树形结构放置,递归实现
* </p>
*
* @param zyxl
*            树list,dsBO不为null,叶子节点的递归循环
* @return String
* @throws
*/

private static String getListToXML(List zyxl, DmSxlxBO dsBO) {
   StringBuffer buf = new StringBuffer();
   Iterator zyxl_ite = zyxl.iterator();
   DmSxlxBO bo = null;
   if (dsBO == null) {
    while (zyxl_ite.hasNext()) {
     bo = (DmSxlxBO) zyxl_ite.next();
     if ("".equals(bo.getSjlxbh()) || (bo.getSjlxbh() == null)) {
      buf.append("<navi prikey=/"" + bo.getLxbh()
        + "/" storeid=/"" + bo.getSjlxbh() + "/" title=/""
        + bo.getLxmc() + "/">/n");
      // 执行dsBO不为null的循环
      buf.append(getListToXML(zyxl, bo));
      buf.append("</navi>/n");
     }
    }
   } else {
    while (zyxl_ite.hasNext()) {
     bo = (DmSxlxBO) zyxl_ite.next();
     if (dsBO.getLxbh().equals(bo.getSjlxbh())) {
      buf.append("<navi prikey=/"" + bo.getLxbh()
        + "/" storeid=/"" + bo.getSjlxbh() + "/" title=/""
        + bo.getLxmc() + "/">/n");
      // 递归循环
      buf.append(getListToXML(zyxl, bo));
      buf.append("</navi>/n");
     }
    }
   }
   return buf.toString();
}
/*
* public static void main(String[] args) { List list = new ArrayList();
* DmSxlxBO bo = new DmSxlxBO(); bo.setLxbh("1"); bo.setSjlxbh("");
* bo.setLxmc("1111"); list.add(bo); DmSxlxBO bo1 = new DmSxlxBO();
* bo1.setLxbh("2"); bo1.setSjlxbh("1"); bo1.setLxmc("2222"); list.add(bo1);
* DmSxlxBO bo2 = new DmSxlxBO(); bo2.setLxbh("3"); bo2.setSjlxbh("1");
* bo2.setLxmc("3333"); list.add(bo2); DmSxlxBO bo3 = new DmSxlxBO();
* bo3.setLxbh("4"); bo3.setSjlxbh("2"); bo3.setLxmc("4444"); list.add(bo3);
* DmSxlxBO bo4 = new DmSxlxBO(); bo4.setLxbh("5"); bo4.setSjlxbh("3");
* bo4.setLxmc("5555"); list.add(bo4); DmSxlxBO bo5 = new DmSxlxBO();
* bo5.setLxbh("6"); bo5.setSjlxbh("4"); bo5.setLxmc("66666");
* list.add(bo5); DmSxlxBO bo6 = new DmSxlxBO(); bo6.setLxbh("7");
* bo6.setSjlxbh("5"); bo6.setLxmc("77777"); list.add(bo6); ZyBOToXML zbtXML =
* new ZyBOToXML(); System.out.println(zbtXML.getTreeXML(list)); }
*/

}

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值