• java 遍历文件夹目录树形结构并在控制台输出且保存到本地文件


    1、指定需要遍历的文件夹路径,代码会自动生成可直接解析的yml文件,也可在控制台打印相关目录结构(控制台打印yml结构的日志需要稍微调整下输入格式),生成的遍历文件可解析成json字符串。

    1. import java.io.*;
    2. /**
    3. * 可用
    4. */
    5. public class ReadDirectory {
    6. // 文件所在的层数
    7. private int fileLevel;
    8. /**
    9. * 生成输出格式
    10. *
    11. * @param name 输出的文件名或目录名
    12. * @param level 输出的文件名或者目录名所在的层次
    13. * @return 输出的字符串
    14. */
    15. public String createPrintStr(String name, int level) {
    16. // 输出的前缀
    17. String printStr = "";
    18. // 按层次进行缩进
    19. for (int i = 0; i < level; i++) {
    20. printStr = printStr + " ";
    21. }
    22. printStr = printStr + "- " + name;
    23. return printStr;
    24. }
    25. /**
    26. * 输出初始给定的目录
    27. *
    28. * @param dirPath 给定的目录
    29. */
    30. public void printDir(String dirPath) {
    31. // 将给定的目录进行分割
    32. String[] dirNameList = dirPath.split("\\\\");
    33. // 设定文件level的base
    34. fileLevel = dirNameList.length;
    35. // 按格式输出
    36. File file = new File("G:\\a.txt");
    37. FileOutputStream fos = null;
    38. try {
    39. fos = new FileOutputStream(file, true);
    40. for (int i = 0; i < dirNameList.length; i++) {
    41. try {
    42. String s = createPrintStr(dirNameList[i], i);
    43. boolean contains = s.contains(":");
    44. if (!contains){
    45. s=s+":";
    46. }
    47. fos.write((s + "\n").getBytes());
    48. } catch (Exception e) {
    49. e.printStackTrace();
    50. }
    51. System.out.println(createPrintStr(dirNameList[i], i));
    52. }
    53. } catch (FileNotFoundException e) {
    54. e.printStackTrace();
    55. } finally {
    56. //关流
    57. try {
    58. fos.close();
    59. } catch (IOException e) {
    60. e.printStackTrace();
    61. }
    62. }
    63. }
    64. /**
    65. * 输出给定目录下的文件,包括子目录中的文件
    66. *
    67. * @param dirPath 给定的目录
    68. */
    69. public void readFile(String dirPath) {
    70. // 建立当前目录中文件的File对象
    71. File file = new File(dirPath);
    72. // 取得代表目录中所有文件的File对象数组
    73. File[] list = file.listFiles();
    74. // 遍历file数组
    75. File fileDownload = new File("G:\\a.txt");
    76. FileOutputStream fos = null;
    77. try {
    78. fos = new FileOutputStream(fileDownload, true);
    79. for (int i = 0; i < list.length; i++) {
    80. String s = "";
    81. if (list[i].isDirectory()) {
    82. System.out.println(createPrintStr(list[i].getName(), fileLevel));
    83. s = createPrintStr(list[i].getName(), fileLevel);
    84. try {
    85. fos.write((s +":"+ "\n").getBytes());
    86. } catch (IOException e) {
    87. e.printStackTrace();
    88. }
    89. fileLevel++;
    90. // 递归子目录
    91. readFile(list[i].getPath());
    92. fileLevel--;
    93. } else {
    94. s = createPrintStr(list[i].getName(), fileLevel);
    95. try {
    96. fos.write((s + "\n").getBytes());
    97. } catch (IOException e) {
    98. e.printStackTrace();
    99. }
    100. System.out.println(createPrintStr(list[i].getName(), fileLevel));
    101. }
    102. }
    103. } catch (FileNotFoundException e) {
    104. e.printStackTrace();
    105. } finally {
    106. try {
    107. //关流
    108. fos.close();
    109. } catch (IOException e) {
    110. e.printStackTrace();
    111. }
    112. }
    113. }
    114. public static void main(String[] args) {
    115. ReadDirectory rd = new ReadDirectory();
    116. String dirPath = "G:\\work\\项目";
    117. String dirPath1 = "";
    118. // try {
    119. // dirPath1= new String(dirPath1.getBytes("GBK"),"UTF-8");//解决中文路径乱码
    120. // } catch (UnsupportedEncodingException e) {
    121. // e.printStackTrace();
    122. // }
    123. rd.printDir(dirPath);
    124. rd.readFile(dirPath);
    125. }
    126. }

    注意;在生成的目录结构文件中如果文件路径存在如@等特殊符号的时候,转json字符串可能会有影响,需要根据自己的需求对特殊符号进行处理。

  • 相关阅读:
    音视频云架构
    XSS详解
    IEDA 自动生成类注释和方法注释
    【面试指南】AI算法面试
    html picture元素
    图的遍历-DFS,BFS(代码详解)
    如何在vue3+vite搭建的项目里面使用new GLTFLoader()加载gltf文件报错出现Uncaught SyntaxError: Unexpected token ':'错误?
    数字媒体概论——声音
    Kotlin 学习笔记(七)operator约定
    【个人成长】高效能人士的七个习惯
  • 原文地址:https://blog.csdn.net/qq_43538925/article/details/126008569