Java工具类,支持根据指定文件扩展名(如.shp或.zip)搜索所在文件夹路径
Java工具类,支持根据指定文件扩展名(如
.shp或.zip)搜索所在文件夹路径
import java.io.File;
import java.util.ArrayList;
import java.util.List;
public class FileFolderFinder {
/**
* 查找指定路径下包含指定扩展名文件的文件夹路径
*
* @param rootPath 根目录路径
* @param extension 要搜索的文件扩展名(如".shp"或".zip")
* @return 包含指定扩展名文件的文件夹路径列表
*/
public static List<String> findFoldersWithExtension(String rootPath, String extension) {
// 确保扩展名以点开头(如".shp"),如果用户忘记加点则自动添加
String normalizedExtension = extension.startsWith(".") ? extension : "." + extension;
File rootDir = new File(rootPath);
if (!rootDir.exists() || !rootDir.isDirectory()) {
throw new IllegalArgumentException("Invalid directory: " + rootPath);
}
return findFoldersWithExtension(rootDir, normalizedExtension);
}
/**
* 递归查找包含指定扩展名文件的文件夹
*/
private static List<String> findFoldersWithExtension(File directory, String extension) {
List<String> result = new ArrayList<>();
// 检查当前文件夹是否包含指定扩展名的文件
if (hasFileWithExtension(directory, extension)) {
result.add(directory.getAbsolutePath());
}
// 遍历子文件夹
File[] files = directory.listFiles();
if (files != null) {
for (File file : files) {
if (file.isDirectory()) {
result.addAll(findFoldersWithExtension(file, extension));
}
}
}
return result;
}
/**
* 检查文件夹是否包含指定扩展名的文件
*/
private static boolean hasFileWithExtension(File directory, String extension) {
String lowerExtension = extension.toLowerCase();
File[] files = directory.listFiles();
if (files != null) {
for (File file : files) {
if (file.isFile() && file.getName().toLowerCase().endsWith(lowerExtension)) {
return true;
}
}
}
return false;
}
// 使用示例
public static void main(String[] args) {
// 示例1:搜索.shp文件
List<String> shpFolders = findFoldersWithExtension("D:/data", ".shp");
System.out.println("包含.shp文件的文件夹路径:");
shpFolders.forEach(System.out::println);
// 示例2:搜索.zip文件
List<String> zipFolders = findFoldersWithExtension("D:/data", ".zip");
System.out.println("\n包含.zip文件的文件夹路径:");
zipFolders.forEach(System.out::println);
}
}
关键改进说明
-
通用化方法:
findFoldersWithExtension(String rootPath, String extension)作为公共接口- 自动处理扩展名格式(支持
.shp或shp两种输入方式)
-
健壮性处理:
- 自动添加扩展名前的点(
shp→.shp) - 检查根目录是否存在
- 大小写不敏感匹配(
.SHP、.Shp、.shp都会被识别)
- 自动添加扩展名前的点(
-
功能覆盖:
- 通过传入不同扩展名支持多种文件类型搜索
- 递归遍历所有子文件夹
- 返回绝对路径列表
使用示例
// 搜索.shp文件所在文件夹
List<String> shpFolders = FileFolderFinder.findFoldersWithExtension(
"C:/GIS_Data",
".shp" // 或 "shp"
);
// 搜索.zip文件所在文件夹
List<String> zipFolders = FileFolderFinder.findFoldersWithExtension(
"C:/Archive",
".zip" // 或 "zip"
);
输出示例
假设目录结构:
C:/
└── GIS_Data/
├── Project1/
│ ├── data.shp
│ └── metadata.txt
├── Project2/
│ └── data.zip
└── Project3/
├── map.shp
└── report.pdf
运行代码后输出:
包含.shp文件的文件夹路径:
C:\GIS_Data\Project1
C:\GIS_Data\Project3
包含.zip文件的文件夹路径:
C:\GIS_Data\Project2
注意事项
-
路径分隔符:在Windows系统中使用反斜杠
\,但Java推荐使用正斜杠/或双反斜杠\\,例如:C:/GIS_DataC:\\GIS_Data
-
性能提示:对于大型目录结构,递归遍历可能较慢。如需优化,可添加最大深度参数。
-
空结果处理:如果未找到匹配文件夹,将返回空列表而非
null。 -
异常处理:当根目录不存在时抛出
IllegalArgumentException,便于调用方处理。
通过传入不同的扩展名参数,可以灵活搜索.shp、.zip或其他任何文件类型所在文件夹路径。
- 感谢你赐予我前进的力量
赞赏者名单
因为你们的支持让我意识到写文章的价值🙏
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 软件从业者Hort
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果

