0
点赞
收藏
分享

微信扫一扫

递归与非递归遍历文件目录

栖桐 2022-12-06 阅读 205


递归遍历目录的缺点:遇到多层级目录时,层级越多,堆栈的负荷越大。

1. import java.io.File;  
2. import java.util.LinkedList;
3.
4. /*
5. * 采用非递归方式遍历目录及其子目录的文件
6. */
7. public class ProcessDirectory {
8. public static int num;//文件总量
9.
10. public static void main(String[] args) {
11. "/Users/Jackie/Downloads/temp";
12. // scanDirNoRecursion(path);
13.
14. new File(path));
15. "目录下共有文件数量为:" + num);
16. }
17.
18. // 非递归
19. public static void scanDirNoRecursion(String path) {
20. new LinkedList();
21. new File(path);
22. if (file.isFile()) {
23. System.out.println(file.getAbsolutePath());
24. num++;
25. return;
26. }
27. //是目录则添加进链表
28. while (!list.isEmpty()) { //如果不为空
29. //先进先出,取出首个文件目录对象并且移除
30. File[] listFiles = f.listFiles();
31. if (listFiles == null) {
32. return;
33. }
34. int length = listFiles.length;
35. for (int i = 0; i < length; i++) {
36. if (listFiles[i].isDirectory()) {
37. list.add(listFiles[i]);
38. else {
39. System.out.println(listFiles[i].getAbsolutePath());
40. num++;
41. }
42. }
43. }
44. "目录下共有文件数量为:" + num);
45. }
46.
47. //递归
48. public static void scanDirRecursion(File file) {
49. if (file.isFile()) {
50. System.out.println(file.getAbsolutePath());
51. num++;
52. return;
53. }
54. File[] listFiles = file.listFiles();
55. int length = listFiles.length;
56. for (int i = 0; i < length; i++) {
57. scanDirRecursion(listFiles[i]);
58. }
59. }
60. }




举报

相关推荐

0 条评论