所写工具类背景:项目经理叫我写个工具类实现:给个项目的根目录分析java文件及jsp文件。记录文件类型、路径、文件名和包名。

定义的实体类(这里我用了easypoi以后方便写入excel文档)

  1. @Data
  2. public class ReadExcelDataEntity implements Serializable {
  3.  
  4. @Excel(name = "文件", orderNum = "1")
  5. private String fileType;
  6.  
  7. @Excel(name = "名称", orderNum = "2")
  8. private String fileName;
  9.  
  10. @Excel(name = "路径", orderNum = "3")
  11. private String filePath;
  12.  
  13. @Excel(name = "包名", orderNum = "4")
  14. private String packageName;
  15. }

工具类:

  1. public class FindAllFile {
  2. private static List<String> allList = new ArrayList<>();
  3.  
  4. /**
  5. * 根据根目录获取所有路径信息
  6. *
  7. * @param f File
  8. * @return allList
  9. */
  10. public static List<String> getFile(File f) {
  11. File[] fList = f.listFiles();
  12. for (int i = 0; i < fList.length; i++) {
  13. if (fList[i].isDirectory() == true) {
  14. getFile(fList[i]);
  15. } else {
  16. allList.add(fList[i].getAbsolutePath());
  17. }
  18. }
  19. return allList;
  20. }
  21.  
  22. /**
  23. * 根据类型获取class一览
  24. *
  25. * @param f File
  26. * @param fileType 文件类型
  27. * @return
  28. */
  29. public static List<ReadExcelDataEntity> findAllFileByFileType(File f, String fileType) {
  30. //清空静态allList多次调用影响数据
  31. allList.clear();
  32. List<ReadExcelDataEntity> list = new ArrayList<>();
  33. String rootPath = f.getPath();
  34. String root = rootPath.replace("\\", "\\\\");
  35. getFile(f);
  36. allList.stream()
  37. .forEach(x -> {
  38. if (x.endsWith(fileType)) {
  39. ReadExcelDataEntity entity = new ReadExcelDataEntity();
  40. //获取文件类型
  41. String[] split = x.split("\\.");
  42. String type = split[split.length - 1];
  43. File file = new File(x);
  44. //获取文件名称
  45. String name = file.getName();
  46. //获取文件路径
  47. String filePath = x.replaceAll(root, " ");
  48. entity.setFileType(type);
  49. entity.setFilePath(filePath.trim());
  50. entity.setFileName(name);
  51. FileReader fr = null;
  52. BufferedReader br = null;
  53. if ("java".equals(fileType)) {
  54. //获取文件类型为java的包名
  55. try {
  56. fr = new FileReader(file);
  57. br = new BufferedReader(fr);
  58. String line = "";
  59. while ((line = br.readLine()) != null) {
  60. if (line.indexOf("package") != -1) {
  61. line = line.replaceAll("package", " ");
  62. entity.setPackageName(line.trim());
  63. list.add(entity);
  64. return;
  65. }
  66. }
  67. } catch (Exception e) {
  68. e.printStackTrace();
  69. } finally {
  70. try {
  71. fr.close();
  72. br.close();
  73. } catch (Exception e) {
  74. e.printStackTrace();
  75. }
  76. }
  77. }
  78. list.add(entity);
  79. }
  80. });
  81. return list;
  82. }
  83.  
  84. /**
  85. * 去除前后字符
  86. *
  87. * @param args 传入的字符串
  88. * @param beTrim 去除格式
  89. * @return
  90. */
  91. public static String trim(String args, char beTrim) {
  92. int st = 0;
  93. int len = args.length();
  94. char[] val = args.toCharArray();
  95. char sbeTrim = beTrim;
  96. while ((st < len) && (val[st] <= sbeTrim)) {
  97. st++;
  98. }
  99. while ((st < len) && (val[len - 1] <= sbeTrim)) {
  100. len--;
  101. }
  102. return ((st > 0) || (len < args.length())) ? args.substring(st, len) : args;
  103. }
  104. }

核心代码:

  1. public static List<String> getFile(File f) {
  2. File[] fList = f.listFiles();
  3. for (int i = 0; i < fList.length; i++) {
  4. if (fList[i].isDirectory() == true) {
  5. getFile(fList[i]);
  6. } else {
  7. allList.add(fList[i].getAbsolutePath());
  8. }
  9. }
  10. return allList;
  11. }

测试类:

  1. public class Test3 {
  2. public static void main(String[] args) {
  3. File file = new File("E:\\日本\\branches\\20190104\\skyreservesatellite");
  4. List<ReadExcelDataEntity> java = FindAllFile.findAllFileByFileType(file, "jsp");
  5. System.out.println(java);
  6. System.out.println(java.size());
  7.  
  8. }
  9. }

测试结果:

jsp文件:

  1. [ReadExcelDataEntity(fileType=jsp, fileName=addflightinfo.jsp, filePath=\skyreservesatellite\satellite\addflightinfo.jsp, packageName=null)]

java文件:

  1. [ReadExcelDataEntity(fileType=java, fileName=UtilCheckerSso.java, filePath=\skyreservesatellite\satellite\src\sky\agency\checker\UtilCheckerSso.java, packageName=sky.agency.checker;)]

java根据所给的根目录获取底下所有文件夹结构的更多相关文章

  1. java 弹出选择目录框(选择文件夹),获取选择的文件夹路径

    java 弹出选择目录框(选择文件夹),获取选择的文件夹路径 java 弹出选择目录框(选择文件夹),获取选择的文件夹路径:int result = 0;File file = null;String ...

  2. Java根路径设置(在获取本地路径时会获取到这个文件夹,,这样就可以专门放配置文件了)

    在获取本地路径时会获取到这个文件夹,,这样就可以专门放配置文件了

  3. 获取WINDOWS特殊文件夹

    const// registry entries for special paths are kept in :  REGSTR_PATH_SPECIAL_FOLDERS   = REGSTR_PAT ...

  4. Java之旅hibernate(2)——文件夹结构

    Hibernate的jar最好是到官网上进行下载.下载最新的稳定的版本号.之后进行解压,以下我们介绍一下hibernate的包结构. 1.      包结构 我们能够看到包文件夹结构发生了变化.我以5 ...

  5. java:多层文件夹情况下,判断文件夹下是否有文件夹,并获取到没有文件夹的名字的方法

    业务问题案例 在公司遇到的一个问题,本以为很小很好解决,没想到花了一下午时间.图给的是文件路径,page1下有10个文件夹,每个有的有文件夹或者文件,要求得到page1下(即:123456789,10 ...

  6. Android(java)学习笔记135:Android中assets文件夹资源的访问

    Android资源文件分类: Android资源文件大致可以分为两种: 第一种是res目录下存放的可编译的资源文件: 这种资源文件系统会在R.java里面自动生成该资源文件的ID,所以访问这种资源文件 ...

  7. Qt获取选择的文件夹和文件路径

    获取文件夹路径 static QString getExistingDirectory(QWidget *parent = Q_NULLPTR, const QString &caption ...

  8. Android(java)学习笔记77:Android中assets文件夹资源的访问

    Android资源文件分类: Android资源文件大致可以分为两种: 第一种是res目录下存放的可编译的资源文件: 这种资源文件系统会在R.java里面自动生成该资源文件的ID,所以访问这种资源文件 ...

  9. TDirectory.GetCreationTime、TDirectory.SetCreationTime获取和设置文件夹创建时间

    使用函数: System.IOUtils.TDirectory.GetCreationTime//获取创建时间 System.IOUtils.TDirectory.SetCreationTime//设 ...

随机推荐

  1. 带你走进ajax(2)

    ajax原理介绍 传统的web应用 传统的web应用是客户端向服务器发送一个http请求后,客户端要一直等待服务器的响应,这时用户什么事也干不成. 最麻烦的是对于表单的提交.比如用户要填写用户信息,等 ...

  2. head中的title显示在body中

    今天遇到一个问题,就是title中的内容会显示在body中 <head> <title>324234</title> </head> 网上搜了一下是说编 ...

  3. python3_ftp多线程上传图片

    项目中研发人员自己写了ftp服务,没有标准ftp中的列表,准备用jmeter对ftp压力测试时发现jmeter要验证列表(如果有同学用jmeter测试过类似的分享一下方法谢谢了),没办法只能用pyth ...

  4. [.net基础]访问修饰符

    标题:[.net基础]访问修饰符 一.前言 基础掌握不牢固啊,所以记录下来. 二.方法访问修饰符Internal (1).创建工程ParentAndSon (2).添加类ModelA namespac ...

  5. pxe无人值守自动安装

    rpm -ivh http://mirrors.ustc.edu.cn/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpmyum listyum upda ...

  6. 20145302张薇《Java程序设计》第四周学习总结

    20145302 <Java程序设计>第四周学习总结 教材学习内容总结 第六章 继承共同行为 面向对象中,子类继承父类,避免重复的行为定义,不过并非为了避免重复定义行为就使用继承. 程序代 ...

  7. [转载]Javassist 使用指南(一)

    ======================= 本文转载自简书,感谢原作者!. 原链接如下:https://www.jianshu.com/p/43424242846b =============== ...

  8. 4.9版本的linux内核中实时时钟芯片pt7c4338的驱动源码在哪里

    答:drivers/rtc/rtc-ds1307.c,内核配置项为CONFIG_RTC_DRV_DS1307 Location: -> Device Drivers -> Real Tim ...

  9. 如何设置hyper-v下的ubuntu虚拟机分辨率

    1.登陆ubuntu虚拟机 2.vi /etc/default/grub,改变如下内容: 改变前: GRUB_CMDLINE_LINUX_DEFAULT="quiet splash" ...

  10. 解决IE6已终止操作问题

    令人崩溃的IE6问题再次出现,打开某个页面时,弹出提示框“Internet Explorer无法打开Internet 站点...已终止操作”.    查了一下资料,感觉“因为js(一个比较复杂的js) ...