列出指定目录下包含某一指定字符串的所有文件名。例如,包含某个字符串,某个前缀;可以使用单独定义过滤类,也可以使用匿名类或Lambda表达式实现。
时间: 2023-06-03 20:06:59 浏览: 57
这是一个技术问题,我可以回答。你可以使用 Java 的 File 类和递归调用方式实现这个功能。下面是示例代码:
```
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class FileSearch {
/**
* 列出指定目录下包含某一指定字符串的所有文件名
*
* @param dirPath 目录路径
* @param keyword 关键词
* @return 包含关键词的文件名列表
*/
public List<String> search(String dirPath, String keyword) {
List<String> result = new ArrayList<>();
File dir = new File(dirPath);
if (!dir.exists() || !dir.isDirectory()) {
return result;
}
File[] files = dir.listFiles();
if (files == null || files.length == 0) {
return result;
}
for (File file : files) {
if (file.isDirectory()) {
result.addAll(search(file.getAbsolutePath(), keyword));
} else {
String fileName = file.getName();
if (fileName.contains(keyword)) {
result.add(file.getAbsolutePath());
}
}
}
return result;
}
/**
* 列出指定目录下以某一指定字符串为前缀的所有文件名
*
* @param dirPath 目录路径
* @param prefix 前缀
* @return 以指定前缀开头的文件名列表
*/
public List<String> searchWithPrefix(String dirPath, String prefix) {
List<String> result = new ArrayList<>();
File dir = new File(dirPath);
if (!dir.exists() || !dir.isDirectory()) {
return result;
}
File[] files = dir.listFiles();
if (files == null || files.length == 0) {
return result;
}
for (File file : files) {
if (file.isDirectory()) {
result.addAll(searchWithPrefix(file.getAbsolutePath(), prefix));
} else {
String fileName = file.getName();
if (fileName.startsWith(prefix)) {
result.add(file.getAbsolutePath());
}
}
}
return result;
}
/**
* 列出指定目录下匹配某一指定正则表达式的所有文件名
*
* @param dirPath 目录路径
* @param pattern 正则表达式
* @return 匹配正则表达式的文件名列表
*/
public List<String> searchWithRegEx(String dirPath, String pattern) {
List<String> result = new ArrayList<>();
File dir = new File(dirPath);
if (!dir.exists() || !dir.isDirectory()) {
return result;
}
File[] files = dir.listFiles();
if (files == null || files.length == 0) {
return result;
}
Pattern p = Pattern.compile(pattern);
for (File file : files) {
if (file.isDirectory()) {
result.addAll(searchWithRegEx(file.getAbsolutePath(), pattern));
} else {
String fileName = file.getName();
Matcher m = p.matcher(fileName);
if (m.matches()) {
result.add(file.getAbsolutePath());
}
}
}
return result;
}
public static void main(String[] args) {
FileSearch fileSearch = new FileSearch();
List<String> filesWithKeyword = fileSearch.search("/path/to/directory", "someKeyword");
List<String> filesWithPrefix = fileSearch.searchWithPrefix("/path/to/directory", "somePrefix");
List<String> filesWithRegEx = fileSearch.searchWithRegEx("/path/to/directory", "someRegEx");
// do something with the file lists
}
}
```
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)