package com.akulaku.platform.components.sc.manager.common.utils;
import lombok.extern.slf4j.Slf4j;
import java.io.File;
import java.io.FileFilter;
import java.util.ArrayList;
import java.util.List;
/**
* @author fankai
* @project_name sc-manager-server
* @description
* @create 2022-06-24 20:41
**/
@Slf4j
public class FileUtils {
/**
* 当前目录下查找文件
* @param findPath
* @param targetFile
* @param fuzzyFind
* @return
*/
public static List<File> searchCurrDirFile(final String findPath, final String targetFile, final boolean fuzzyFind) {
return searchFile(findPath, targetFile, fuzzyFind, 1);
}
/**
* 可指定深度查找文件
* @param findPath 查找的目录
* @param targetFile 需要查找的目标文件
* @param fuzzyFind 是否模糊查询
* @param maxDepth 最大深度
*/
public static List<File> searchFile(final String findPath, final String targetFile, final boolean fuzzyFind, int maxDepth) {
File findDir = new File(findPath);
// 如果是文件,切换为文件所在的目录
if (findDir.isFile()) {
findDir = findDir.getParentFile();
}
return listFiles(findDir, maxDepth, child -> {
String name = child.getName();
if (fuzzyFind) {
return name.contains(targetFile);
} else {
return name.equals(targetFile);
}
});
}
private static ArrayList<File> listFiles(final File findDir, int maxDepth, FileFilter filter) {
String fileNames[] = findDir.list();
ArrayList<File> files = new ArrayList<>();
if (fileNames != null){
for (String name : fileNames) {
File f = new File(findDir, name);
// 如果是目录继续遍历
if (f.isDirectory() && maxDepth > 1) {
ArrayList<File> r = listFiles(f, --maxDepth, filter);
files.addAll(r);
} else {
if (filter == null || filter.accept(f)){
files.add(f);
}
}
}
}
return files;
}
public static void main(String[] args) {
String preJar = "D:\\data\\publish-package\\al-gateway-capi\\77861\\pre\\ops_auto_dev_al-gateway-capi_FanKai-feature_feature-4.7.1-20220606.tar.gz";
List<File> files = searchFile(preJar, "apm-resttemplate-4.3.x-plugin-7.0.0", true, 10);
if (files != null) {
for (File file : files) {
log.info("查询出来的文件 file={}", file);
}
}
}
}
Java 查找指定目录下匹配的文件
最新推荐文章于 2023-03-17 14:29:22 发布