java根据所给的根目录获取底下所有文件夹结构

时间:2021-04-21 12:27:04

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

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

@Data
public class ReadExcelDataEntity implements Serializable {

    @Excel(name = "文件", orderNum = "1")
    private String fileType;

    @Excel(name = "名称", orderNum = "2")
    private String fileName;

    @Excel(name = "路径", orderNum = "3")
    private String filePath;

    @Excel(name = "包名", orderNum = "4")
    private String packageName;
}

工具类:

public class FindAllFile {
    private static List<String> allList = new ArrayList<>();

    /**
     * 根据根目录获取所有路径信息
     *
     * @param f File
     * @return allList
     */
    public static List<String> getFile(File f) {
        File[] fList = f.listFiles();
        for (int i = 0; i < fList.length; i++) {
            if (fList[i].isDirectory() == true) {
                getFile(fList[i]);
            } else {
                allList.add(fList[i].getAbsolutePath());
            }
        }
        return allList;
    }

    /**
     * 根据类型获取class一览
     *
     * @param f        File
     * @param fileType 文件类型
     * @return
     */
    public static List<ReadExcelDataEntity> findAllFileByFileType(File f, String fileType) {
        //清空静态allList多次调用影响数据
        allList.clear();
        List<ReadExcelDataEntity> list = new ArrayList<>();
        String rootPath = f.getPath();
        String root = rootPath.replace("\\", "\\\\");
        getFile(f);
        allList.stream()
                .forEach(x -> {
                    if (x.endsWith(fileType)) {
                        ReadExcelDataEntity entity = new ReadExcelDataEntity();
                        //获取文件类型
                        String[] split = x.split("\\.");
                        String type = split[split.length - 1];
                        File file = new File(x);
                        //获取文件名称
                        String name = file.getName();
                        //获取文件路径
                        String filePath = x.replaceAll(root, " ");
                        entity.setFileType(type);
                        entity.setFilePath(filePath.trim());
                        entity.setFileName(name);
                        FileReader fr = null;
                        BufferedReader br = null;
                        if ("java".equals(fileType)) {
                            //获取文件类型为java的包名
                            try {
                                fr = new FileReader(file);
                                br = new BufferedReader(fr);
                                String line = "";
                                while ((line = br.readLine()) != null) {
                                    if (line.indexOf("package") != -1) {
                                        line = line.replaceAll("package", " ");
                                        entity.setPackageName(line.trim());
                                        list.add(entity);
                                        return;
                                    }
                                }
                            } catch (Exception e) {
                                e.printStackTrace();
                            } finally {
                                try {
                                    fr.close();
                                    br.close();
                                } catch (Exception e) {
                                    e.printStackTrace();
                                }
                            }
                        }
                        list.add(entity);
                    }
                });
        return list;
    }

    /**
     * 去除前后字符
     *
     * @param args   传入的字符串
     * @param beTrim 去除格式
     * @return
     */
    public static String trim(String args, char beTrim) {
        int st = 0;
        int len = args.length();
        char[] val = args.toCharArray();
        char sbeTrim = beTrim;
        while ((st < len) && (val[st] <= sbeTrim)) {
            st++;
        }
        while ((st < len) && (val[len - 1] <= sbeTrim)) {
            len--;
        }
        return ((st > 0) || (len < args.length())) ? args.substring(st, len) : args;
    }
}

核心代码:

public static List<String> getFile(File f) {
        File[] fList = f.listFiles();
        for (int i = 0; i < fList.length; i++) {
            if (fList[i].isDirectory() == true) {
                getFile(fList[i]);
            } else {
                allList.add(fList[i].getAbsolutePath());
            }
        }
        return allList;
    }

测试类:

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

    }
}

测试结果:

jsp文件:

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

java文件:

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