java中扫描指定文件夹下面的所有文件
扫描一个文件夹下面的所有文件,因为文件夹的层数没有限制可能多达几十层几百层,通常会采用两种方式来遍历指定文件夹下面的所有文件。
递归方式
非递归方式(采用队列或者栈实现)
下面我就给出两种方式的实现代码,包括了递归与非递归实现,code如下所示。
package q.test.filescanner;
import java.io.File;
import java.util.ArrayList;
import java.util.LinkedList;
import q.test.filescanner.exception.ScanFilesException;
/**
* @author 邪恶小先生
*/
public class FolderFileScanner {
private static ArrayList scanFiles = new ArrayList();
/**linkedList实现**/
private static LinkedList queueFiles = new LinkedList();
/**
* TODO:递归扫描指定文件夹下面的指定文件
* @return ArrayList
* @author 邪恶小先生(LQ)
* @time 2017年11月3日
*/
public static ArrayList scanFilesWithRecursion(String folderPath) throws ScanFilesException{
ArrayList dirctorys = new ArrayList();
File directory = new File(folderPath);
if(!directory.isDirectory()){
throw new ScanFilesException('"' + folderPath + '"' + " input path is not a Directory , please input the right path of the Directory. ^_^...^_^");
}
if(directory.isDirectory()){
File [] filelist = directory.listFiles();
for(int i = 0; i < filelist.length; i ++){
/**如果当前是文件夹,进入递归扫描文件夹**/
if(filelist[i].isDirectory()){
dirctorys.add(filelist[i].getAbsolutePath());
/**递归扫描下面的文件夹**/
scanFilesWithRecursion(filelist[i].getAbsolutePath());
}
/**非文件夹**/
else{
scanFiles.add(filelist[i].getAbsolutePath());
}
}
}
return scanFiles;
}
/**
*
* TODO:非递归方式扫描指定文件夹下面的所有文件
* @return ArrayList
* @param folderPath 需要进行文件扫描的文件夹路径
* @author 邪恶小先生(LQ)
* @time 2017年11月3日
*/
public static ArrayList scanFilesWithNoRecursion(String folderPath) throws ScanFilesException{
File directory = new File(folderPath);
if(!directory.isDirectory()){
throw new ScanFilesException('"' + folderPath + '"' + " input path is not a Directory , please input the right path of the Directory. ^_^...^_^");
}
else{
//首先将第一层目录扫描一遍
File [] files = directory.listFiles();
//遍历扫出的文件数组,如果是文件夹,将其放入到linkedList中稍后处理
for(int i = 0; i < files.length; i ++){
if(files[i].isDirectory()){
queueFiles.add(files[i]);
}else{
//暂时将文件名放入scanFiles中
scanFiles.add(files[i].getAbsolutePath());
}
}
//如果linkedList非空遍历linkedList
while(!queueFiles.isEmpty()){
//移出linkedList中的第一个
File headDirectory = queueFiles.removeFirst();
File [] currentFiles = headDirectory.listFiles();
for(int j = 0; j < currentFiles.length; j ++){
if(currentFiles[j].isDirectory()){
//如果仍然是文件夹,将其放入linkedList中
queueFiles.add(currentFiles[j]);
}else{
scanFiles.add(currentFiles[j].getAbsolutePath());
}
}
}
}
return scanFiles;
}
}
Java递归搜索指定文件夹下的匹配文件
import java.io.File; import java.util.ArrayList; import java.util.List; import java.util.Queue; /** ...
JAVA 遍历文件夹下的所有文件
JAVA 遍历文件夹下的所有文件(递归调用和非递归调用) 1.不使用递归的方法调用. public void traverseFolder1(String path) { int fileNum = ...
java读取某个文件夹下的所有文件
import java.io.FileNotFoundException;import java.io.IOException;import java.io.File; public class Re ...
JAVA遍历一个文件夹中的所有文件
在实际项目中给定一文件夹,得到这个文件夹下所有的文件这样的需求并不是很多,更多的是查找或是删除某一具体的文件 import java.io.File; import java.util.ArrayLi ...
JAVA 遍历文件夹下的所有文件(递归调用和非递归调用)
JAVA 遍历文件夹下的所有文件(递归调用和非递归调用) 1.不使用递归的方法调用. public void traverseFolder1(String path) { int fileNum = ...
用Java实现将多级文件夹下的所有文件统一放到一个文件夹中
每次下了电影(男生懂得呦),每部电影都放在一个单独的文件夹里,看的时候很是不方便啊,一直重复着进入文件夹.后退,再进.再退的操作,而手动把这些电影全部复制出来又太繁琐.因此为了解决这个问题,用IO写了 ...
Java:<;获取>;、<;删除>;指定文件夹及里面所有文件
工具类代码如下: 一.获取 public Class Test{ //定义全局变量,存放所有文件夹下的文档 List fileList ; public List
JAVA获取文件夹下所有的文件
package com.test; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; im ...
随机推荐
MySQL错误日志总结
MySQL错误日志是记录MySQL 运行过程中较为严重的警告和错误信息,以及MySQL每次启动和关闭的详细信息.错误日志的命名通常为hostname.err.其中,hostname表示服务器主机名. ...
servlet的四个作用域
作用域规定的是变量的有效期限,servlet有四个作用域对象,这里只说三个: 一. request作用域: 1.作用范围: 就是指从http请求发起,到服务器处理结束,返回响应的整个过程.在这个过程中 ...
防御病毒邮件得看U-Mail邮件网关
其实在邮件通讯中,那些病毒.垃圾邮件.钓鱼软件也相当危险,在海量邮件中,你没法确定什么时间.哪一封会发起进攻,攻击的目标都有谁?但是一旦得逞,造成的损失又特别大. 最近美国同行又发现了一个新骗局:美国 ...
转:UML类图几种关系的总结
..
Hibernate征途(五)之继承映射和组件映射
之所以把这两种映射放到一起说,是因为二者都是以复用为目的,减少了代码和配置量,这是相同点:二者之间的不同点类似继承和实现的区别:继承的类是一个事物的抽象,而实现的接口仅仅是功能的抽象. 继承映射 如上 ...
NFC应用(二)读写器模式
NFC第二种应用场境就是所谓的读写器模式.既然有卡,当然就会有读写器,这两种模式是配合在一起使用的.两个卡放一起不能通信,两个读写器模式的设备也不能通信. NFC读写器一般支持以下一种或多种协议:Mi ...
setsockopt详解
Socket描述符选项[SOL_SOCKET] #include int setsockopt( int socket, int level, int op ...
websocket协议握手详解
最近使用tornado做长链接想着怎么着也要试试websocket协议吧.所以说干就干. 首先要知道websocket是基于http协议的,为什么这么说?因为从协议来说,websocket是借用了一部 ...
C# ConcurrentQueue实现
我们从C# Queue 和Stack的实现知道Queue是用数组来实现的,数组的元素不断的通过Array.Copy从一个数组移动到另一个数组,ConcurrentQueue我们需要关心2点:1线程安全 ...
css/html/Javascript/getUrlCode/各种前端小点汇总集合
js与原生进行数据交互,简单来说就是原生拦截js传到的数据 var u = navigator.userAgent; var isAndroid = u.indexOf('Android') > ...