使用递归方式遍历指定磁盘路径下的文件及文件夹

来源:互联网 发布:淘宝开店诈骗 编辑:程序博客网 时间:2024/06/10 09:13
 package com.javase.io2;

import java.io.File;
import java.util.ArrayList;


public class FileTest {
    //确定当前目录是多少层
    private static int time;
    //遍历磁盘某一路径中的文件
    public static void recursionFile(File file){
        //递归的出口,如果传进来的是一个文件,或者传进来的是一个空目录,则停止
        //如果传进来的是一个文件夹,文件夹下面有文件下或文件,则显示出文件夹的名称和文件夹下的文件名称
        if(file.isFile()||0==file.listFiles().length){
            return;
        }else{
            File[] files = file.listFiles();
            files = sort(files);
            for(File f : files){
                StringBuffer output = new StringBuffer();
                if(f.isFile()){
                    //如果是文件,首先显示一个缩进,但是缩进多少,需要获取一个表示进第几层目录的数字,
                    //用这个数字来决定缩进量
                    output.append(getTabs(time));
                    output.append(f.getName());
                }else{
                    output.append(getTabs(time));
                    output.append(f.getName()).append("文件夹");
                }
                System.out.println(output.toString());
                //如果当前对象是文件夹,则递归调用显示文件的方法,注意先增加缩进量,然后遍历,遍历一个,需要将平级
                //的
                if(f.isDirectory()){
                    time++;
                    recursionFile(f);
                    time--;
                }
            }
        }
        
    }
    
    //对文件夹下的文件夹与文件进行排序,使得文件夹放在文件的前面,并将排序结果返回
    public static File[] sort(File[] files){
        ArrayList<File> sorted =new ArrayList<File>();
        for(File f : files){
            if(f.isDirectory()){
                sorted.add(f);
            }
        }
        
        for(File f : files){
            if(f.isFile()){
                sorted.add(f);
            }
        }
        
        return sorted.toArray(new File[files.length]);
    }
    
    public static String getTabs(int time){
        StringBuffer buffer = new StringBuffer();
        for(int i = 0 ; i < time ; i++){
            buffer.append("\t");    
        }
        return buffer.toString();        
    }
    
    @SuppressWarnings("static-access")
    public static void main(String[] args) {
        new FileTest().recursionFile(new File("D:\\tools"));
    }
}