J2ME的文件系统运用(二)递归存储器目录

如果我需要列出某个目录下的所有文件夹和文件,那我就需要对这个目录进行递归。对目录进行递归的思想很简单:每个目录底下都可能有文件或者文件夹,文件和文件夹的区别就是名称否包含”/”,只要当前的文件夹下还包含文件夹我就必须一直遍历下去,递归的终点就是遇到文件或者空文件夹。递归无非就是方法的自调用,找到通用点以及方法的自调用点,结束点,递归还是很容易实现的,递归本质上是对方法做while循环

原理很简单,下面就是代码部分:

/**
 *
 * @author 水货程序员
 */
public class FileSystem {

    public Hashtable table = new Hashtable();
    public int level = 1;

        public void getTreeList(String path) {
        try {
            FileConnection fc = (FileConnection) Connector.open(path, Connector.READ);
            Enumeration enums = fc.list();
            Vector folderVector = new Vector();
            while (enums.hasMoreElements()) {
                String name = enums.nextElement().toString();
                //我这里把name作为key,level作为value,本末倒置,但是读取数据的时候还是很方便的。
                //这里我声明一个level变量,有点参照oracle中level的意思,level用来区分文件或文件夹属于哪一级。
                table.put(name, new Integer(level));
                //判断是否为文件夹
                if (name.indexOf("/") > 0) {
                    folderVector.addElement(name);
                }
            }
            int size = folderVector.size();
            //如果没到最底端
            if (size > 0) {
                level ++;
                for (int i = 0; i < size; i++) {
                    String tmpPath = path + folderVector.elementAt(i).toString();
                    //这里就是递归点
                    getTreeList(tmpPath);
                }
            }else{
                //这里就是结束点
                return;
            }

        } catch (IOException ex) {
            ex.printStackTrace();
        }
    }
}
调用代码也很简单:
import com.sun.lwuit.Button;
import com.sun.lwuit.Form;
import com.sun.lwuit.layouts.BoxLayout;
import com.thinkrace.UCHome.file.FileSystem;
import java.util.Enumeration;

/**
 *
 * @author 水货程序员
 */
public class FileListForm extends Form {

    FileSystem fs = new FileSystem();

    public FileListForm() {
        setLayout(new BoxLayout(BoxLayout.Y_AXIS));
        testFileRecurse();
        show();
    }

    /**
     * 测试文件递归
     */
    public void testFileRecurse() {
        String path = "file:///c:/data/";
        fs.getTreeList(path);
        //由于我的本末倒置,Hashtable中的key存的是文件或文件夹的名称,value存的是级别
        Enumeration enums = fs.table.keys();
        while(enums.hasMoreElements()){
            String name = enums.nextElement().toString();
            Button b = new Button(name);
            addComponent(b);
        }
    }
}
在这一节里,我的界面部分并没有生成相应的树形结构, 那个level变量的作用就是用来生成树形结构用的,在下一节我将用LWUIT的Tree实现目录的树形结构。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值