java根据所给的根目录获取底下所有文件夹结构
所写工具类背景:项目经理叫我写个工具类实现:给个项目的根目录分析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;)]
java根据所给的根目录获取底下所有文件夹结构的更多相关文章
- java 弹出选择目录框(选择文件夹),获取选择的文件夹路径
java 弹出选择目录框(选择文件夹),获取选择的文件夹路径 java 弹出选择目录框(选择文件夹),获取选择的文件夹路径:int result = 0;File file = null;String ...
- Java根路径设置(在获取本地路径时会获取到这个文件夹,,这样就可以专门放配置文件了)
在获取本地路径时会获取到这个文件夹,,这样就可以专门放配置文件了
- 获取WINDOWS特殊文件夹
const// registry entries for special paths are kept in : REGSTR_PATH_SPECIAL_FOLDERS = REGSTR_PAT ...
- Java之旅hibernate(2)——文件夹结构
Hibernate的jar最好是到官网上进行下载.下载最新的稳定的版本号.之后进行解压,以下我们介绍一下hibernate的包结构. 1. 包结构 我们能够看到包文件夹结构发生了变化.我以5 ...
- java:多层文件夹情况下,判断文件夹下是否有文件夹,并获取到没有文件夹的名字的方法
业务问题案例 在公司遇到的一个问题,本以为很小很好解决,没想到花了一下午时间.图给的是文件路径,page1下有10个文件夹,每个有的有文件夹或者文件,要求得到page1下(即:123456789,10 ...
- Android(java)学习笔记135:Android中assets文件夹资源的访问
Android资源文件分类: Android资源文件大致可以分为两种: 第一种是res目录下存放的可编译的资源文件: 这种资源文件系统会在R.java里面自动生成该资源文件的ID,所以访问这种资源文件 ...
- Qt获取选择的文件夹和文件路径
获取文件夹路径 static QString getExistingDirectory(QWidget *parent = Q_NULLPTR, const QString &caption ...
- Android(java)学习笔记77:Android中assets文件夹资源的访问
Android资源文件分类: Android资源文件大致可以分为两种: 第一种是res目录下存放的可编译的资源文件: 这种资源文件系统会在R.java里面自动生成该资源文件的ID,所以访问这种资源文件 ...
- TDirectory.GetCreationTime、TDirectory.SetCreationTime获取和设置文件夹创建时间
使用函数: System.IOUtils.TDirectory.GetCreationTime//获取创建时间 System.IOUtils.TDirectory.SetCreationTime//设 ...
随机推荐
- c++之旅:模板库中的容器
容器 C++中的容器包括array, vector, list,map,set 数组 array不可变长,创建时其大小就固定了,array中可以存储各种数据类型包括对象,不过array是在栈上分配的, ...
- C++与C混编
C++与C混编 本案例通过实现一个简单的UDP服务器来说明C++与C的混合编程问题 C代码 通过C代码来对UDP服务器的创建,监听进行封装 udp.c文件 #include <sys/types ...
- 在安装好MySql后忘记root的密码,或者给root添加密码
一.编辑MySql的配置文件:my.ini(在MySql安装目录下). 打开配置文件,在文件最后一行添加:skip-grant-tables,然后保存退出. 意思为就是在启mysql时不启动grant ...
- # 20145103《Java程序设计》第6周学习总结
20145103<Java程序设计>第6周学习总结 教材学习内容总结 第十章 第十章输入和输出 10.1.1 ·若要将数据从来源中取出,可以使用输入串流:若要将数据写入目的地,可以使用输出 ...
- delegate委托
https://www.cnblogs.com/leicao/p/5251090.html 委托是一种存储函数引用的类型,在事件和事件的处理时有重要的用途 通俗的说,委托是一个可以引用方法的类型,当创 ...
- JVM反调调用优化,导致发生大量异常时log4j2线程阻塞
背景 在使用log4j2打日志时,当发生大量异常时,造成大量线程block问题的问题. 一个关于log4j2的高并发问题:https://blog.fliaping.com/a-high-concur ...
- springboot集成shiro 前后端分离 统一处理shiro异常
在前后端分离的情况下,shiro一些权限异常处理会返回401之类的结果,这种结果不好统一管理.我们希望的结果是统一管理,所有情况都受我们控制 就算权限验证失败,我们也希望返回200,并且返回我们定义的 ...
- NAT模式下远程连接centos6虚拟机与虚拟机网络配置
最近装了centos,但是没有网络,也无法远程连接.关键是虚拟机中没有ip地址. 网上方法很多,但是每个人情况不一样,所以不尽适用. 1.解决这个问题,首先保证你的vmware的dhcp服务和net服 ...
- 【ROI Pooling】ROI Pooling层详解(转)
原文链接:https://blog.deepsense.ai/region-of-interest-pooling-explained/ 目标检测typical architecture 通常可以分为 ...
- Python基础笔记系列十:模块
本系列教程供个人学习笔记使用,如果您要浏览可能需要其它编程语言基础(如C语言),why?因为我写得烂啊,只有我自己看得懂!! 模块 #1.类比于java中的jar包,模块能让你能够有逻辑地组织你的Py ...