java 遍历文件夹内文件(包含子文件夹内文件),可以指定一种或多种文件类型。
import java.io.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
public class TraversalFiles {
public static void main(String[] args) {
TraversalFiles tf = new TraversalFiles();
// List<File> files = tf.getFiles("E:\\");
List<File> files = tf.getFiles("E:\\",".json");
// List<File> files = tf.getFiles("E:\\",".json",".txt");
}
/**
*
* @param path 文件夹路径
* @param exts 文件后缀名,例如:一个".json"或多个".json",".txt"...,不填则返回所有类型的文件
* @return 返回文件列表
*/
public List<File> getFiles(String path, String... exts) {
List<File> filesList = new ArrayList<>();
File file = new File(path);
LinkedList<File> list = new LinkedList<>();
//判断文件夹是否存在
if (file.exists()&&file.isDirectory()) {
//判断文件夹内是否有文件
if (null == file.listFiles()) {
return filesList;
}
list.addAll(Arrays.asList(file.listFiles()));
while (!list.isEmpty()) {
//获取第一个元素
File firstFile = list.removeFirst();
//判断第一个元素是否为文件夹
if(firstFile.isDirectory()){
//获取文件夹内文件
File[] files = firstFile.listFiles();
if (null == files) {
continue;
}
for (File f : files) {
if (f.isDirectory()) {
list.add(f);
} else {
if(null != exts){
if(isExit(f.getName(),exts)){
filesList.add(f);
}
}else {
filesList.add(f);
}
}
}
}else {
if(null != exts){
if(isExit(firstFile.getName(),exts)){
filesList.add(firstFile);
}
}else {
filesList.add(firstFile);
}
}
}
} else {
System.out.println("文件不存在!");
}
return filesList;
}
/**
* <p>
* 判断文件是否存在
* </p>
* @param fileName 文件名
* @param exts 文件类型
* @return
*/
private boolean isExit(String fileName,String... exts){
if(null != exts){
for(int i = 0; i < exts.length; i++){
if(fileName.toLowerCase().endsWith(exts[i].toLowerCase())){
return true;
}
}
}
return false;
}
}