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//设 ...
随机推荐
- Spring 事务管理tx,aop
spring tx:advice事务配置 2016年12月21日 17:27:22 阅读数:7629 http://www.cnblogs.com/rushoooooo/archive/2011/08 ...
- POSIX 进程间通信 (可移植操作系统接口)
1.什么是POSIX标准 Portable Operating System Interface for Computing System. 他是一个针对操作系统(准确地说是针对类Unix操作系统)的 ...
- HDFS数据块
磁盘也是由数据块组成的,一般默认大小是512字节,构建磁盘之上的文件系统一般是磁盘块的整数倍. HDFS也是采用块管理的,但是比较大,在Hadoop1.x中默认大小是64M,Hadoo ...
- 【虚拟机】linux 桥接模式 固定静态IP
1:在root用户下修改 2:进入root用户下 vim/etc/sysconfig/network-scripts/ifcfg-eth0 2.修改完保存退出 3.重启网络服务:service net ...
- Statement与PreparedStatement
Statement 用于通用查询,能批处理 PreparedStatement(简称PS) 用于执行参数化查询,能批处理 什么是参数化查询? 指在设计与数据库链接并访问数据时,在需要填入数值或数据的地 ...
- 基于tomcat集群做session共享
前端代理服务器nginx:192.168.223.136 tomcat服务器:采用的一台多实例192.168.223.146:8081,192.168.223.146:8082(如何构建多实例tomc ...
- 20145310 GDB调试汇编堆栈分析
GDB调试汇编堆栈分析 由于老师说要逐条分析汇编代码,所以我学习卢肖明同学的方法,重新写了一篇博客. 代码: #include<stdio.h> short addend1 = 1; st ...
- react native 0.56.0版本在windows下有bug不能正常运行
react native的0.56.0版本在windows下有bug不能正常运行请init 0.55.4的版本 react-native init MyApp --version 0.55.4 注意v ...
- VS+Qt
1.安装vs 2.安装qt[带msvc编译器的] 3.安装addin插件 4.新建qt app项目 5.在qt options里添加qt版本 路径添加到msvc那一层,如:E:\Qt5.9\5.9\m ...
- html-常用块级及行级标签
1.常见块级标签 <h1></h1>......<h6></h6>:标题标签 h标签:标题标签,自动加粗,h1最大,h6最小 例:(前后隔一行) ...