java 遍历文件夹内文件(包含子文件夹内文件)

16uni 2021年04月27日 4,246次浏览

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;
    }
}