获取指定文件夹下所有文件,以及子文件夹内所有文件方法
/**
* @param dirFile:
* @return List<File>
* @author lov3YJ
* @description 获取指定文件夹下所有文件,以及子文件夹内所有文件
*/
public static List<File> getAllFile(File dirFile){
// 如果文件夹不存在或着不是文件夹,则返回 null
if(Objects.isNull(dirFile) || !dirFile.exists() || dirFile.isFile()) {
return null;
}
File[] childrenFiles = dirFile.listFiles();
if(Objects.isNull(childrenFiles) || childrenFiles.length == 0) {
return null;
}
List<File> files = new ArrayList<>();
for(File childFile : childrenFiles) {
// 如果是文件,直接添加到结果集合
if(childFile.isFile()) {
files.add(childFile);
}else {
// 如果是文件夹。将其内部文件添加进结果集合。
List<File> cFiles = getAllFile(childFile);
if(Objects.isNull(cFiles) || cFiles.isEmpty()) {
continue;
}
files.addAll(cFiles);
}
}
return files;
}
文件类型处理统计主方法
public static void main(String[] args) {
//文件夹路径
String path = "C:\\Users\\asus\\Desktop\\test";
//指定文件路径获取文件夹内所有文件List
List<File> allFile = Demo.getAllFile(new File(path));
if (allFile == null) {
System.out.println("文件夹内无文件!!!");
return;
}
HashMap<Object, Integer> fileTypeCountMap = new HashMap<>();
allFile.forEach( file -> {
//截取文件类型
String fileType = file.getName().substring(file.getName().lastIndexOf(".") + 1);
//判断Map中有无当前文件类型 有则数量+1 ,否则添加进map
if (fileTypeCountMap.containsKey(fileType)) {
Integer count = fileTypeCountMap.get(fileType);
fileTypeCountMap.put(fileType, ++count);
}else{
fileTypeCountMap.put(fileType, 1);
}
});
System.out.println(fileTypeCountMap);
}
整体代码
import java.io.File;
import java.util.*;
/**
* @ClassName: Demo
* @Description:
* @author: Lov3YJ
*/
public class Demo {
public static void main(String[] args) {
//文件夹路径
String path = "C:\\Users\\asus\\Desktop\\test";
//指定文件路径获取文件夹内所有文件List
List<File> allFile = Demo.getAllFile(new File(path));
if (allFile == null) {
System.out.println("文件夹内无文件!!!");
return;
}
HashMap<Object, Integer> fileTypeCountMap = new HashMap<>();
allFile.forEach( file -> {
//截取文件类型
String fileType = file.getName().substring(file.getName().lastIndexOf(".") + 1);
//判断Map中有无当前文件类型 有则数量+1 ,否则添加进map
if (fileTypeCountMap.containsKey(fileType)) {
Integer count = fileTypeCountMap.get(fileType);
fileTypeCountMap.put(fileType, ++count);
}else{
fileTypeCountMap.put(fileType, 1);
}
});
System.out.println(fileTypeCountMap);
}
/**
* @param dirFile:
* @return List<File>
* @author lov3YJ
* @description 获取指定文件夹下所有文件,以及子文件夹内所有文件
* @date 2022/10/25 13:55
*/
public static List<File> getAllFile(File dirFile){
// 如果文件夹不存在或着不是文件夹,则返回 null
if(Objects.isNull(dirFile) || !dirFile.exists() || dirFile.isFile()) {
return null;
}
File[] childrenFiles = dirFile.listFiles();
if(Objects.isNull(childrenFiles) || childrenFiles.length == 0) {
return null;
}
List<File> files = new ArrayList<>();
for(File childFile : childrenFiles) {
// 如果是文件,直接添加到结果集合
if(childFile.isFile()) {
files.add(childFile);
}else {
// 如果是文件夹。将其内部文件添加进结果集合。
List<File> cFiles = getAllFile(childFile);
if(Objects.isNull(cFiles) || cFiles.isEmpty()) {
continue;
}
files.addAll(cFiles);
}
}
return files;
}
}