所写工具类背景:项目经理叫我写个工具类实现:给个项目的根目录分析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;)]