使用java.nio.file工具包,读取文件,读取文件夹。整体思路就是一层层剥取,由头部向尾部递归获取所有文件。
使用java.nio.file工具包
Path path = Paths.get("Src"); //得到Src的一个Path 对象
Stream stream = Files.list(path); //获取Src文件夹下的文件,文件夹,流对象
List fileList = stream.collect(Collectors.toList()); //转list集合
public static void main(String[] args) throws IOException {
String rootPath = System.getProperty("user.dir");
//扫描得到Src下的所有文件
List<String> src = getSpecifyPathFileList(rootPath);
// src.forEach(System.out::println);
//获取当前路径下所有的包路径(含子包)
List<String> currentPathAllPackage = getCurrentPathAllPackage(rootPath);
// currentPathAllPackage.forEach(System.out::println);
//获取当前路径下所有的包(不含子包)
List<String> currentPathPackage = getCurrentPathPackage(rootPath);
currentPathPackage.forEach(System.out::println);
}
/**
* @return
* @author Huey
* @date 2021/3/25 18:50
* @params Src
* @description 获取指定目录夹下所有文件
**/
public static List<String> getSpecifyPathFileList(String path) throws IOException {
//获取到所有目录
List<String> allPackageList = getCurrentPathAllPackage(path);
//存放所有文件的容器
List<String> docList = new ArrayList<>();
//遍历获取所有目录下的文件
for (String val : allPackageList) {
List fileList = Files.list(Paths.get(val)).collect(Collectors.toList());
//遍历获取的文件,包的集合
for (int i = 0; i < fileList.size(); i++) {
String undefinedFileName = fileList.get(i).toString();
if (validIsFile(undefinedFileName)) {
// undefinedFileName = undefinedFileName.substring(undefinedFileName.indexOf("java") + 5, undefinedFileName.indexOf(".java"));
// undefinedFileName = undefinedFileName.replaceAll("\\\\", ".");
docList.add(undefinedFileName);
}
}
}
return docList;
}
/**
* @return
* @author Huey
* @date 2021/3/25 19:11
* @params
* @description 获取当前路径下的所有包路径
**/
public static List<String> getCurrentPathAllPackage(String path) throws IOException {
List<String> allPackage = new ArrayList<>();
//获取当前路径下的包
List<String> packageList = getCurrentPathPackage(path);
//递归获取当前路径下的所有包
while (!packageList.isEmpty()) {
//承接每次递归获取的包
List<String> newAllGetList = new ArrayList<>();
//遍历上次获取的包,继续获取包下面的子包
for (String packageName : packageList) {
List<String> list = getCurrentPathPackage(packageName);
//将获取到的所有包放入返回容器
allPackage.addAll(list);
//将所有获取到的包放入下次递归的转化容器
newAllGetList.addAll(list);
}
//清空下次递归的容器
packageList.clear();
//将转接容器中的包给到递归容器
packageList = newAllGetList;
}
return allPackage;
}
/**
* @return
* @author Huey
* @date 2021/3/25 19:16
* @params
* @description 获取当前路径下的包
**/
public static List<String> getCurrentPathPackage(String path) throws IOException {
//获取当前路径下的所有包,文件
List fileList = Files.list(Paths.get(path)).collect(Collectors.toList());
List<String> packageList = new ArrayList<>();
//遍历获取的文件,包的集合
for (int i = 0; i < fileList.size(); i++) {
String undefinedFileName = fileList.get(i).toString();
if (!validIsFile(undefinedFileName)) {
packageList.add(undefinedFileName);
}
}
return packageList;
}
/**
* @return
* @author Huey
* @date 2021/3/25 19:05
* @params
* @description 校验是不是文件
**/
public static boolean validIsFile(String name) {
if (name == null || "".equals(name.trim())) {
return false;
}
File file = new File(name);
return file.isFile();
}