实现读取文件夹下(包括多层子目录)所有文件的文件

时间:2023-01-15 12:26:45
 1 /**
 2      * 实现读取文件夹下(包括子目录)所有文件的文件
 3      * 
 4      * @return
 5      */
 6     public static List<File> scanFiles(String path) {
 7         // 存放所有文件的集合
 8         List<File> fileList = new ArrayList<File>();
 9         // 存放所有文件的集合(包含目录)
10         List<File> filePaths = new ArrayList<File>();
11         LinkedList<File> list = new LinkedList<File>();
12         File dir = new File(path);
13         File[] file = dir.listFiles();
14 
15         for (int i = 0; i < file.length; i++) {
16             if (file[i].isDirectory()) {
17                 // 把第一层的目录,全部放入链表
18                 list.add(file[i]);
19             }
20             filePaths.add(file[i]);
21         }
22         // 循环遍历链表
23         while (!list.isEmpty()) {
24             // 把链表的第一个记录删除
25             File tmp = list.removeFirst();
26             // 如果删除的目录是一个路径的话
27             if (tmp.isDirectory()) {
28                 // 列出这个目录下的文件到数组中
29                 file = tmp.listFiles();
30                 if (file == null) {// 空目录
31                     continue;
32                 }
33                 // 遍历文件数组
34                 for (int i = 0; i < file.length; ++i) {
35                     if (file[i].isDirectory()) {
36                         // 如果遍历到的是目录,则将继续被加入链表
37                         list.add(file[i]);
38                     }
39                     filePaths.add(file[i]);
40                 }
41             }
42         }
43         // 去除文件夹,只保留文件
44         if (null != filePaths && filePaths.size()>0) {
45             for (File tempFile : filePaths) {
46                 if (tempFile.isFile()) {
47                     fileList.add(tempFile);
48                 }
49             }
50         }
51         return fileList;
52     }