算法:Java使用栈模拟递归遍历目录

package com.oceanstar;

import java.io.File;
import java.util.*;

public class ArrayListImp {
    // 只显示文件
    public static Object[] WalkDir(File file) {
        if (!file.exists()){
            System.out.println("not exist");
            return null;
        }
        List<Object> list = new ArrayList<>();
        File[] fileList = file.listFiles();
        assert fileList != null;
        for (File f : fileList) {
            if (f.isDirectory()) {
                Object[] objects = WalkDir(f);
                list.addAll(Arrays.asList(objects));
            }else { //f.isFile()
                list.add(f.getAbsoluteFile() );
            }

        }
        return list.toArray();
    }

    // 层次显示目录
   public static Object[] WalkDir(File file, int level) {
        if (!file.exists()){
            System.out.println("not exist");
            return null;
        }

        String str = "|";
        for(int i = 0; i < level; i++){
            str += "------";
        }

        List<Object> list = new ArrayList<>();
        File[] fileList = file.listFiles();
        assert fileList != null;
        for (File f : fileList) {
            if (f.isDirectory()) {
                Object[] objects = WalkDir(f, level + 1);
                list.addAll(Arrays.asList(objects));
            }else {
                list.add(str + f.getName() + "\n");
            }

        }
        return list.toArray();
    }


    // 如果是文件就追加到
    public static Object[] WalkDirStack(File file) {
        List<Object> list = new ArrayList<>();
        Stack<File> stack = new Stack<>();
        stack.push(file);
        while (!stack.empty()){
            File gf = stack.pop();
            File[] fileList = gf.listFiles();
            assert fileList != null;
            for (File f : fileList) {
                if (f.isDirectory()) {
                    stack.push(f);
                }else {
                    list.add(f.getName());
                }
            }
        }

        return list.toArray();
    }

    // 如果是文件就追加到
    public static Object[] WalkDirStack2(File file) {
        List<Object> list = new ArrayList<>();
        Stack<File> stack = new Stack<>();
        stack.push(file);
        while (!stack.empty()){
            File gf = stack.pop();
            File[] fileList = gf.listFiles();
            assert fileList != null;
            for (File f : fileList) {
                if (f.isDirectory()) {
                    list.add(f.getName());
                    stack.push(f);
                }else {
                    list.add( f.getName());
                }
            }
        }

        return list.toArray();
    }

    public static void main(String args[]) {
        Object[] o = WalkDirStack(new File("F:\\Hi3559AV100R001C02SPC020\\01.software\\board"));
        for (Object c: o) {
            System.out.println(c);
        }
     //   System.out.println(Arrays.toString(o));
        System.out.println(o.length);;
    }
}

在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值