Java的后台文件夹下文件的遍历完整代码
作者:人圭先生 发布时间:2023-09-18 12:32:19
标签:java,遍历
一、在java中遍历一个文件夹里边的所有文件,可以有两种方式:
1.递归遍历,通常也是开发者第一时间能想到的方法,递归遍历的优点是:实现起来相对简单,代码量相对较少,执行效率较高,缺点是:比较吃内存,对硬件要求较高
// 递归遍历
private void getDirectory(File file) {
File flist[] = file.listFiles();
if (flist == null || flist.length == 0) {
return 0;
}
for (File f : flist) {
if (f.isDirectory()) {
//这里将列出所有的文件夹
System.out.println("Dir==>" + f.getAbsolutePath());
getDirectory(f);
} else {
//这里将列出所有的文件
System.out.println("file==>" + f.getAbsolutePath());
}
}
}
2.非递归遍历,递归遍历的话是很容易理解的,但是非递归遍历的话估计思路不太容易上来,我当时也苦思良久,发现java有个一个LinkedList这玩意,字面上也大概知道,这个是用来保存一个链接文件的列表,有这个的话就好办了,具体思路是这样:遍历一个文件夹的时候,如果是文件夹,就添加到linkedlist里去,如果是文件则列出;这样该目录的文件和文件夹就遍历完毕了,文件夹全部被保存到linkedlist里;所以剩下的就是遍历linkedlist里边的文件夹的文件,遍历方式同上边的操作一致,如果是文件夹就添加到linkedlist里边(Ps:遍历过程中的linkedlist始终是同一个list),当然每次从列表取出一个文件夹之后需要从列表中删除该文件夹,这里采用linkedlist.removeFirst()来读取,这样是每次读取列表的第一个元素并将其从列表剔除。这样只要遍历到linkedlist的状态是isEmty的时候就说明遍历完毕了。
// 非递归遍历
private void GetDirectorySize(File file) {
LinkedList list = new LinkedList();
//保存待遍历文件夹的列表
GetOneDir(file, list);
//调用遍历文件夹根目录文件的方法
File tmp;
while (!list.isEmpty()) {
tmp = (File) list.removeFirst();
//这个地方的判断有点多余,但是为了保险还是给个判断了,正常情况列表中是只有文件夹的
//但是不排除特殊情况,例如:本身是文件夹的目标在压入堆栈之后变成了文件
if (tmp.isDirectory()) {
GetOneDirSize(tmp, list);
} else {
System.out.println("file==>" + tmp.getAbsolutePath());
}
}
}
// 遍历指定文件夹根目录下的文件
private void GetOneDir(File file , LinkedList list){
//每个文件夹遍历都会调用该方法
System.out.println("Dir==>" + f.getAbsolutePath());
File[] files = file.listFiles();
sumdir += 1;
if (files == null || files.length == 0) {
return ;
}
for (File f : files) {
if (f.isDirectory()) {
list.add(f);
} else {
//这里列出当前文件夹根目录下的所有文件
System.out.println("file==>" + f.getAbsolutePath());
}
}
}
二、用Java遍历一个文件夹并获取它里面的所有内容
package demo0823;
import java.io.File;
import java.util.ArrayList;
public class FileTest {
private static ArrayList<String> fileList = new ArrayList<String>();
public static void main(String[] args) {
String filepath = "G:\\Test\\icon";
getFiles(filepath);
}
static void getFiles(String filepath){
File root = new File(filepath);
File[] files = root.listFiles();
for (File file : files){
if(file.isDirectory()){
//如果file是一个目录,循环递归调用地柜
//递归调用
getFiles(file.getAbsolutePath());
fileList.add(file.getAbsolutePath());
System.out.println("显示"+filepath+"下所有子目录及其文件"+file.getAbsolutePath());
} else{
//不是目录的话遍历其地下的文件
System.out.println("显示"+filepath+"下所有子文件"+file.getAbsolutePath());
}
}
}
}
效果图:
来源:http://blog.csdn.net/sinat_15274667/article/details/52295999


猜你喜欢
- mybatis介绍 * 的一个作用就是我们可以拦截某些方法的调用,我们可以选择在这些被拦截的方法执行前后加上某些逻辑,也可以在执行这些被拦截
- java 中遍历取值异常(Hashtable Enumerator)解决办法用迭代器取值时抛出的异常:java.util.NoSuchEle
- 配置文件请看上篇Java实现redis https://www.jb51.net/article/190922.htm下面测试redis的集
- 首先我们要知道,微信的聊天记录一般是不提供给我们获取的,所以一般情况下我们手机没root的话就拿不到了。就算是root后的手机,想要获取微信
- Spring Cloud是现在流行的分布式服务框架,它提供了很多有用的组件。比如:配置中心、Eureka服务发现、消息总线、熔断机制等。配置
- 一、前言在spring中,定义rabbitMq的消费者可以相当方便,只需要在消息处理类或者类方法加上@RabbitListener注解,指定
- Spark Streaming算子开发实例transform算子开发transform操作应用在DStream上时,可以用于执行任意的RDD
- 在日常工作中,经常需要不同格式的图片,有时还需要进行图片格式的相互转换,本文以一个简单的小例子,简述图片格式转换的常见方法,仅供学习分享使用
- 一般来说一个 HTML 文档有很多标签,比如“<html>”、“<body>”、“<table>”等,想
- 用于字符串替换,你还在用以下的这种方法吗?String.format(String format, Object... args)这是Str
- 一、 * 简介 * 通常通过 * 的方式来执行。 * 的生命周期由IoC容器管理,可以通过注入等方式来获取其他Bean的实例,使用更方便。
- 前言该篇介绍的内容如题,就是利用redis实现接口的限流( 某时间范围内 最大的访问次数 ) 。正文 惯例,
- @Value("${xxx}")取properties时中文乱码(1)检查spring的配置文件中,properties
- 这个是基于SystemBarTintManager更改的增加一个方法:用于更改MIUIV6系统上的状态栏字体颜色 ,目前我仅仅只发现MIUI
- 1、使用步骤1)构建请求网址A、确定端点:每个GIS服务都有一个端点。例如,ArcGIS Server上Demographics文件夹下名为
- 现在以一个例子来介绍mybatis的动态SQL和模糊查询:通过多条件查询用户记录,条件为姓名模糊匹配,并且年龄在某两个值之间。新建表d_us
- mysql默认的隔离级别是repeatable_read根据spring文档,数据库一共有4个隔离级别read_uncommitread_c
- try catch finally组合:检测异常,并传递给catch处理,并在finally中进行资源释放。try catch组合 : 对代
- 先上效果图这个效果来自于三星S5的充电界面,当然有些细节差别,主要看思路.本文目的是技术交流,不要将效果直接运用于商业产品和项目.电池背景因
- IoC的概念介绍控制反转(IOC)模式(又称DI:Dependency Injection)就是Inversion of Control,控