所写工具类背景:项目经理叫我写个工具类实现:给个项目的根目录分析java文件及jsp文件。记录文件类型、路径、文件名和包名。
定义的实体类(这里我用了easypoi以后方便写入excel文档)
@Datapublic 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\\0104\\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;)]