版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_40990836/article/details/78955697
一、遍历文件夹下的所有文件
public class File05{
// 需求:便利目标文件夹下的所有文件(文件及文件夹)
public static void main(Stringp[] args){
// 需求分析
// 1.拿到目标文件对应的File 对象
// 2.遍历该目标文件夹的一级子目录
// 3.在遍历一级子目录过程中,会出现文件与文件夹(有无子目录)两种不同类型
// 对象、应接着对文件夹进行进一步遍历,如此重复 2 3 步骤
// 拿到目标文件对应的 File 对象
String rPath = "./file04";
// 转换成File 对象
File target = new File(rPath);
}
private static void traverse(File file){
// 代码的健壮性考虑
// 如果文件或者空文件夹,无需遍历直接结束方法(空return)
if(file.isFile()||file.list().length == 0){
return;
}
// 遍历当前file 一级子目录
for(File f : file.listFiles()){
// 将遍历到的一级子目录均打印出来
System.out.print(f.getName());
// 如果是文件夹 便进行进一步遍历
if(f.isDirectory()){
traverse(f);
}
}
}
}
二、使用队列方式遍历目标文件夹
// 通过队列方式遍历目标文件夹
// 需求分析:
// 1.需一个遍历方法
// 方法的修饰词:private static
// 方法返回值:存放所有子文件的单例集合Collection
// 方法参数列表:文本文件的File对象
// 方法的实现体:通过队列结构一层一层遍历
public class File06{
public static void main(String[] args){
// 解决方法的需求
File file = new File("./file04");
// 接收方法的值(执行结果)
Collection<File> collection = traverse(file);
// 处理接收到的结果 遍历出来
for(File f: collection){
System.out.println(f.getName());
}
}
private static Collection<File> traverse(File file){
// 健壮性
// 判断是否是文件 或者 是否为空文件夹
if(file.isFile()||file.list().length == 0){
return null;
}
// 1.拥有存储所有遍历结果的集合
Collection<File> collection = new ArrayList<>();
// 2.拥有队列功能结构的对象
// 队列功能:先进先出(集合|可变|易操作)
LinkedList<File> folders = new LinkedList<>();
// 遍历一级目录
for(File f : file.listFiles()){
collection.add(f);
// 将一级目录文件夹存储到队列当中
// 判断 如果是文件夹 添加到folders中
if(f.isDirectory()){
folders.add(f);
}
}
// 通过队列结构 一层一层目录
// 便利的对象是谁: 从队列中取出的第一个
// 便利的出口: 队列为空
while(!folders.isEmpty()){
// 将队列中的第一个元素取出来
File folder = folders.pop();
// 将该级目录全部储存
for(File file2 : folders){
collcetion.add(file2);
// 将该级目录文件夹存储到队列
if(file2.isDirectory()){
folders.add(file2);
}
}
}
return collection;
}
// 优化队列遍历
public static Collection<File> traverseSup(File){
// 健壮性
// 判断是否为文件 或者是否稳空文件夹
if(file.isFile()||file.list().length == 0){
return null;
}
// 1.拥有存储所有遍历结果的集合
Collection<File> collection = new ArrayList<>();
// 2.拥有队列功能结构的对象
// 队列功能: 先进先出
LinkedList<File> folders = new LinkedList<>();
// 先将目标文件添加进队里
folders.add(file);
// 所有下叙遍历操作第一次就是遍历目标文件夹
while(!folders.isEmpty()){
// pop() 从队列中取出一个元素(取出的会从队列中移除)
File folder = folders.pop();
for(File f : folder.listFiles()){
collection.add(f);
// 将子目录添加到队列中
if(f.isDirectory()){
folders.add(f);
}
}
}
}
}