美文网首页Java web
递归实例:按层级打印文件夹目录实例

递归实例:按层级打印文件夹目录实例

作者: haiyong6 | 来源:发表于2018-09-19 23:58 被阅读0次
    package testProject;
    
    import java.io.File;
    import java.util.ArrayList;
    import java.util.List;
    
    public class IoFileTest {
        public static void main(String[] args) {
            IteratorUtil.IteratorDir(new File("/home/zhaohy/Music"));
        }
        
        
    }
    
    class IteratorUtil{
        private static int level = 0;//层级数
        public static void IteratorDir(File file) {
            if(file != null) {
                //找出递归的出口
                //假设是文件或者是空文件夹就返回
                if(file.isFile() || file.listFiles().length == 0) {
                    return;
                } else {
                    File[] files = file.listFiles();
                    //要求是先输出文件夹再输出文件
                    files = sort(files);
                    
                    for(File f : files) {
                        StringBuffer sb = new StringBuffer();
                        if(f.isFile()) {
                            sb.append(getTab(level));
                            sb.append(f.getName());
                        } else {
                            sb.append(getTab(level));
                            sb.append(f.getName());
                            sb.append("\\");
                        }
                        System.out.println(sb.toString());
                        //假如是文件夹
                        if(f.isDirectory()) {
                            level++;//进入目录遍历,层级加一
                            IteratorDir(f);//递归调用遍历目录的方法
                            level--;//目录层级减一 返回上一级目录 继续打印输出
                        }
                        
                    }
                    
                }
            }
        }
        
        /**
         * 根据层级数返回制表符\t所组成的字符串
         * @param level
         * @return
         */
        private static String getTab(int level) {
            StringBuffer sb = new StringBuffer();
            for(int i = 0; i < level; i++) {
                sb.append("\t");
            }
            return sb.toString();
        }
        
        /**
         * 给file数组排序 先放文件夹再放文件
         * @param files
         * @return
         */
        private static File[] sort(File[] files) {
            List<File> fList = new ArrayList<File>();
            //先存放文件夹
            for(File f : files) {
                if(f.isDirectory()) {
                    fList.add(f);
                }
            }
            //再存放文件
            for(File f :files) {
                if(f.isFile()) {
                    fList.add(f);
                }
            }
            return fList.toArray(new File[fList.size()]);
        }
    }
    
    

    相关文章

      网友评论

        本文标题:递归实例:按层级打印文件夹目录实例

        本文链接:https://www.haomeiwen.com/subject/zuownftx.html