输入文件夹,输出其中的文件夹和文件,可以使用深度优先(递归)和广度优先(队列)。
代码
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