/**
* 要对文件进行遍历,就是遍历其中所有的文件及文件夹,可以用递归和循环两种方式进行遍历(递归比较简单)。
* */
package com.basic.exe;
import java.io.File;
import java.util.LinkedList;
public class BianLiFile {
public static void main(String[] args) {
showFileInfo1("E:\\Android学习笔记");
}
/**
* 思路:
* 拿到文件后,先判断该问价是否存在,如果不存在就不进行操作,如果文件存在,
* 就将该文件转变成文件数组,以便于对文件进行遍历。
* 拿到文件数组后,判断该文件是否为空,如果不为空,就判断该文件是否是文件夹,如果不是,就输出其路径或者名称,
* 如果该文件是文件夹,就输出该文件夹的路径或者名称,然后继续对此文件夹进行遍历,直到其不是文件夹。
* */
public static void showFileInfo1(String path) {
File file=new File(path);
//判断文件是否存在
if(file.exists()){
//将文件转变成文件数组
File files[]=file.listFiles();
//判断文件是否为空
if(files.length==0){
System.out.println("该文件为空!");
}
for (File file2 : files) {
//判断文件是否是文件夹
if(file2.isDirectory()){
System.out.println("文件夹:"+file.getAbsolutePath());
showFileInfo1(file2.getAbsolutePath());
}else{
System.out.println("文件:"+file2.getAbsolutePath());
}
}
}else{
System.out.println("文件不存在!");
}
}
/**
* 利用循环进行遍历
* 思路:
* 1、先将传入的字符串转变成文件,然后判断该文件是否存在。
* 2、将文件转变成文件数组,用于之后的而遍历,定义一个容器(集合),用于存放文件夹。
* 3、判断该文件是否是文件夹,如果是,就将其存放到集合中,如果不是,就打印其路径或者名称。
* 4、判断该文件夹是否被遍历了,如果已经被遍历了,就从集合中移除,若没有,就存入到集合中。
* 5、如果集合为空时,遍历结束。
* */
public static void showFileInfo2(String path){
//将字符串转变成文件
File file=new File(path);
//判断该文件是否存在
if(file.exists()){
//定义一个容器,用于存放文件夹
LinkedList<File>list=new LinkedList<>();
//将文件转变为文件数组
File files[]=file.listFiles();
//判断该文件是否为空
if(files.length==0){
System.out.println("该文件为空!");
}
//对文件数组进行遍历
for (File file2 : files) {
//判断文件是否是文件夹
if(file2.isDirectory()){
System.out.println("文件夹:"+file2.getAbsolutePath());
list.add(file2);
}else{
System.out.println("文件:"+file2.getAbsolutePath());
}
}
File nextFile=null;
while(!list.isEmpty()){
nextFile=list.removeFirst(); //移除并返回此列表的第一个元素
files=nextFile.listFiles();
for (File file2 : files) {
if(file2.isDirectory()){
System.out.println("文件夹:"+file2.getAbsolutePath());
list.add(file2);
}else{
System.out.println("文件:"+file2.getAbsolutePath());
}
}
}
}else{
System.out.println("该文件不存在!");
}
}
}
结果: