输入文件夹,输出其中的文件夹和文件,可以使用深度优先(递归)和广度优先(队列)。

代码

import java.io.File;
import java.util.PriorityQueue;
import java.util.Queue;
import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        System.out.println("请输入路径:");
        String path = in.nextLine();
        getDirFileLength(path);
        in.close();
    }

    /**
     * 采用广度优先搜索文件夹下所有文件的总长度
     * 
     * @param filename
     */
    public static void getDirFileLength(String path) {
        File dir = new File(path);
        if (!dir.exists()) {
            System.out.println("文件夹路径不对");
            return;
        }
        File[] fileLists = dir.listFiles();
        if (fileLists.length == 0) {
            System.out.println("该文件夹是空的");
            return;
        }
        Queue<File> qf = new PriorityQueue<>();
        for (File f : fileLists) {
            if (f.isDirectory()) {
                System.out.println("文件夹:" + f.getAbsolutePath());
                // getDirFileLength(f.getAbsolutePath());//深度优先
                qf.add(f);
            } else {
                System.out.println("文件:" + f.getAbsolutePath() + File.separator + f.getName() + " 长度为:" + f.length());
            }
        }
        while (!qf.isEmpty()) {
            File f = qf.poll();
            System.out.println("正在扫描目录:" + f.getPath() + File.separator + f.getName() + "............");
            int dirNum = 0;
            int fileNum = 0;
            int fileLen = 0;
            for (File ff : f.listFiles()) {
                if (ff.isDirectory()) {// 目录入队列
                    qf.add(ff);
                    dirNum++;
                } else {
                    fileNum++;
                    fileLen += ff.length();
                }
            }
            System.out.println("共找到该目录下有" + dirNum + "个文件夹," + fileNum + "个文件,文件总长度为:" + fileLen);
        }
    }
}

测试:

请输入路径:
/home/workspace/eclipse/CourseWork
文件夹:/home/workspace/eclipse/CourseWork/bin
文件:/home/workspace/eclipse/CourseWork/.classpath/.classpath 长度为:295
文件夹:/home/workspace/eclipse/CourseWork/.settings
文件夹:/home/workspace/eclipse/CourseWork/src
文件:/home/workspace/eclipse/CourseWork/.project/.project 长度为:369
正在扫描目录:/home/workspace/eclipse/CourseWork/.settings/.settings............
共找到该目录下有0个文件夹,1个文件,文件总长度为:587
正在扫描目录:/home/workspace/eclipse/CourseWork/bin/bin............
共找到该目录下有1个文件夹,0个文件,文件总长度为:0
正在扫描目录:/home/workspace/eclipse/CourseWork/bin/com/com............
共找到该目录下有1个文件夹,0个文件,文件总长度为:0
正在扫描目录:/home/workspace/eclipse/CourseWork/bin/com/jimo/jimo............
共找到该目录下有3个文件夹,0个文件,文件总长度为:0
正在扫描目录:/home/workspace/eclipse/CourseWork/bin/com/jimo/io/io............
共找到该目录下有0个文件夹,3个文件,文件总长度为:3598
正在扫描目录:/home/workspace/eclipse/CourseWork/bin/com/jimo/thread/thread............
共找到该目录下有0个文件夹,4个文件,文件总长度为:4489
正在扫描目录:/home/workspace/eclipse/CourseWork/bin/com/jimo/work/work............
共找到该目录下有2个文件夹,0个文件,文件总长度为:0
正在扫描目录:/home/workspace/eclipse/CourseWork/bin/com/jimo/work/w1/w1............
共找到该目录下有0个文件夹,4个文件,文件总长度为:7680
正在扫描目录:/home/workspace/eclipse/CourseWork/bin/com/jimo/work/w2/w2............
共找到该目录下有0个文件夹,1个文件,文件总长度为:2810
正在扫描目录:/home/workspace/eclipse/CourseWork/src/src............
共找到该目录下有1个文件夹,0个文件,文件总长度为:0
正在扫描目录:/home/workspace/eclipse/CourseWork/src/com/com............
共找到该目录下有1个文件夹,0个文件,文件总长度为:0
正在扫描目录:/home/workspace/eclipse/CourseWork/src/com/jimo/jimo............
共找到该目录下有3个文件夹,0个文件,文件总长度为:0
正在扫描目录:/home/workspace/eclipse/CourseWork/src/com/jimo/io/io............
共找到该目录下有0个文件夹,3个文件,文件总长度为:1932
正在扫描目录:/home/workspace/eclipse/CourseWork/src/com/jimo/thread/thread............
共找到该目录下有0个文件夹,4个文件,文件总长度为:1833
正在扫描目录:/home/workspace/eclipse/CourseWork/src/com/jimo/work/work............
共找到该目录下有2个文件夹,0个文件,文件总长度为:0
正在扫描目录:/home/workspace/eclipse/CourseWork/src/com/jimo/work/w1/w1............
共找到该目录下有0个文件夹,4个文件,文件总长度为:4357
正在扫描目录:/home/workspace/eclipse/CourseWork/src/com/jimo/work/w2/w2............
共找到该目录下有0个文件夹,1个文件,文件总长度为:1673

results matching ""

    No results matching ""