用java写一个方法,完成在指定目录搜索指定字符串,字符串可能在多个文件的多个位置出现,要返回在哪个文件的第几行出现过,该方法有5个参数,第1个参数是要搜索的目录,第2个参数是要搜索的字符串,第3个参数是大小写是否敏感,第4个参数是是否搜索子目录,第5个参数是搜索的文件后缀类型,如果为空,搜索所有文件后缀
时间: 2023-02-09 22:10:54 浏览: 83
下面是一个可以满足你要求的 Java 方法的示例实现:
```
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class SearchStringInDirectory {
public static List<String> search(String directory, String searchString, boolean caseSensitive, boolean searchSubdirectories, String fileSuffix) throws IOException {
List<String> result = new ArrayList<>();
File dir = new File(directory);
if (!dir.exists() || !dir.isDirectory()) {
return result;
}
File[] files = dir.listFiles();
if (files == null) {
return result;
}
for (File file : files) {
if (file.isDirectory() && searchSubdirectories) {
result.addAll(search(file.getAbsolutePath(), searchString, caseSensitive, searchSubdirectories, fileSuffix));
} else {
if (fileSuffix == null || file.getName().endsWith(fileSuffix)) {
BufferedReader reader = new BufferedReader(new FileReader(file));
String line;
int lineNumber = 1;
while ((line = reader.readLine()) != null) {
if (caseSensitive) {
if (line.contains(searchString)) {
result.add(file.getName() + ": line " + lineNumber);
}
} else {
if (line.toLowerCase().contains(searchString.toLowerCase())) {
result.add(file.getName() + ": line " + lineNumber);
}
}
lineNumber++;
}
reader.close();
}
}
}
return result;
}
}
```
使用方法:
```
List<String> result = SearchStringInDirectory.search("/path/to/directory", "search string", false, true, ".txt");
for (String s : result) {
System.out.println(s);
}
```
在这个方法中,第一个参数 `directory` 是要搜索的目录,第二个参数 `searchString` 是要搜索的字符串,第三个参数 `caseSensitive` 是大小写是否敏感,第四个参数 `searchSubdirectories` 是否搜索子目录,第五个参数 `fileSuffix` 是搜索的文件后缀类