所写工具类背景:项目经理叫我写个工具类实现:给个项目的根目录分析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根据所给的根目录获取底下所有文件夹结构的更多相关文章

  1. java 弹出选择目录框(选择文件夹),获取选择的文件夹路径

    java 弹出选择目录框(选择文件夹),获取选择的文件夹路径 java 弹出选择目录框(选择文件夹),获取选择的文件夹路径:int result = 0;File file = null;String ...

  2. Java根路径设置(在获取本地路径时会获取到这个文件夹,,这样就可以专门放配置文件了)

    在获取本地路径时会获取到这个文件夹,,这样就可以专门放配置文件了

  3. 获取WINDOWS特殊文件夹

    const// registry entries for special paths are kept in :  REGSTR_PATH_SPECIAL_FOLDERS   = REGSTR_PAT ...

  4. Java之旅hibernate(2)——文件夹结构

    Hibernate的jar最好是到官网上进行下载.下载最新的稳定的版本号.之后进行解压,以下我们介绍一下hibernate的包结构. 1.      包结构 我们能够看到包文件夹结构发生了变化.我以5 ...

  5. java:多层文件夹情况下,判断文件夹下是否有文件夹,并获取到没有文件夹的名字的方法

    业务问题案例 在公司遇到的一个问题,本以为很小很好解决,没想到花了一下午时间.图给的是文件路径,page1下有10个文件夹,每个有的有文件夹或者文件,要求得到page1下(即:123456789,10 ...

  6. Android(java)学习笔记135:Android中assets文件夹资源的访问

    Android资源文件分类: Android资源文件大致可以分为两种: 第一种是res目录下存放的可编译的资源文件: 这种资源文件系统会在R.java里面自动生成该资源文件的ID,所以访问这种资源文件 ...

  7. Qt获取选择的文件夹和文件路径

    获取文件夹路径 static QString getExistingDirectory(QWidget *parent = Q_NULLPTR, const QString &caption ...

  8. Android(java)学习笔记77:Android中assets文件夹资源的访问

    Android资源文件分类: Android资源文件大致可以分为两种: 第一种是res目录下存放的可编译的资源文件: 这种资源文件系统会在R.java里面自动生成该资源文件的ID,所以访问这种资源文件 ...

  9. TDirectory.GetCreationTime、TDirectory.SetCreationTime获取和设置文件夹创建时间

    使用函数: System.IOUtils.TDirectory.GetCreationTime//获取创建时间 System.IOUtils.TDirectory.SetCreationTime//设 ...

随机推荐

  1. motan rpc

    git :  帮助 文档 基本介绍 Motan是一套基于java开发的RPC框架,除了常规的点对点调用外,Motan还提供服务治理功能,包括服务节点的自动发现.摘除.高可用和负载均衡等.Motan具有 ...

  2. oracle中add_months函数的用法

    如果需要取上一个月的数据,并且每天都要进行此操作,每次都需要改时间,的确非常的麻烦,所以想到了oracle add_months函数这个函数 oracle add_months函数: oracle a ...

  3. rowspan && colspan

    > 跨行 <html> <body> <table width="> <tr> <th>col1</th> &l ...

  4. Spring Tomcat启动过程

    入口,配置再web.xml中, 初始化applicationContext 创建webApplicationContext,这里可加载web.xml文件中定义了contextClass 获取conte ...

  5. 20145307第四次JAVA学习实验报告

    20145307实验四 Android开发基础 实验内容 基于Android Studio开发简单的 Android应用并部署测试; 了解Android组件.布局管理器的使用: 掌握Android中事 ...

  6. Objective-C 集成农行支付接口

    部分参考代码: [NANetworkHandler POSTWithURL:APP_ABCPay par:dict isStored:NO success:^(id responseObject, B ...

  7. 构造函数挨个过 —— String()

    本篇整理JavaScript中构造函数String的相关知识,主要分为以下三个部分: 构造函数String()的作用与使用方式: String()的属性和方法: 字符串对象实例属性和方法: 一 构造函 ...

  8. oracle update set select from 关联更新

    工作中有个需求,现在新表中有一些数据跟老表的基本一样,这样只需要把老表中数据搬到新表中就可以了,同时把不同的字段修改下数据即可,在修改字段时发现,需要指定一个条件,比如主键id,来修改某条记录,这样一 ...

  9. mysql创建数据库和用户

    create database sonar character set utf8 collate utf8_general_ci; flush privileges; grant all privil ...

  10. 51 Nod 1091 线段的重叠

    2017-09-24 19:51:41 writer:pprp 上一个题目就是关于线段重叠最大值,这个是找区间最长重合? 给你n个线段,然后让你在其中选择两条,使两条尽可能重合多一点 解决方法; 1. ...