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

    在centos7上安装rdesktop来访问windows桌面,需要安装EPEL源,另外还有需要安装专门的YUM源. rpm -Uvh https://dl.fedoraproject.org/pub ...

  2. Web服务器端程序的实现

    Web服务器端程序主要是两个部分,一部分是主函数,一部门是命令处理函数.命令处理函数比较好理解就是针对客户端不同的命令进行处理,与客户端进行通信.主函数也有两个主要的功能,第一是要对程序进行初始化,其 ...

  3. mybatis家族

    mybatis 优秀的持久层框架,它支持定制化SQL.存储过程以及高级映射. 备注:通过mapper实现数据库与实体类相互映射 MyBatis 避免了几乎所有的JDBC 代码和手动设置参数以及获取结果 ...

  4. vsftpd基于mysql的认证方式

    安装epel源: cd /etc/yum.repos.d wget http://mirrors.neusoft.edu.cn/epel/epel-release-latest-6.noarch.rp ...

  5. 求生之路 Hammer World Editor打开后闪退解决办法

    试过WinXp.Win7.Win10 都无法正常启动Hammer,搜索N多资料后发现如图修改 控制面板 -> 区域 -> 格式 -> 英语[美国] 即可正常启动了!!!

  6. STS,MyEclipse中Maven配置

    本文以STS的环境做讲解,MyEclipse环境和STS差别不大,配置过程相似. STS是解压版的,启动后,可以看到已经有了Maven插件,, 但是,STS也同时给你了一个Maven,但是通常不建议使 ...

  7. [BZOJ1912]巡逻

    Description Input 第一行包含两个整数 n, K(1 ≤ K ≤ 2).接下来 n – 1行,每行两个整数 a, b, 表示村庄a与b之间有一条道路(1 ≤ a, b ≤ n). Ou ...

  8. Pandas学习1

    pandas有两种自己独有的基本数据结构Series和DataFrame Series 数据结构 data 100 300 500 index 0 1 2 或者 index data 0 100 1 ...

  9. wireshark抓包分析

    TCP协议首部: 分析第一个包: 源地址:我自己电脑的IP,就不放上来了 Destination: 222.199.191.33 目的地址 TCP:表明是个TCP协议 Length:66 表明包的长度 ...

  10. 推荐给开发者的11个PHP框架(转)

    PHP框架对于Web开发者来说是非常有用的工具,它可以帮助使用者更快.更容易的完成项目.根据调查,PHP仍是Web开发中最受欢迎和最实用的平台之一.当谈及Web开发时,很多人依然会选择使用PHP框架, ...