思路:先让用户输入一个目录,然后遍历目录下的所有文件,将文件中的内容提取出来,用StringBuilder将所有字符串拼接,然后再用StringBuilder的Index方法来查找匹配的字符串,从而根据内容找到文件,返回该文件名称以及绝对路径.
源码:
import javax.management.RuntimeErrorException;
import java.io.*;
import java.nio.file.Files;
import java.util.Scanner;
public class IODemo {
public static void main(String[] args) {
System.out.println("请输入要查找的目录:");
Scanner scanner = new Scanner(System.in);
String directory = scanner.next();
System.out.println("请输入要查找的文件内容:");
String content = scanner.next();
File dire = new File(directory);
if(!dire.isDirectory()){
System.out.println("输入目录错误!");
return;
}
scanFile(dire , content);
}
private static void scanFile(File dire , String content){
File[] files = dire.listFiles();
if(files == null){
return ;
}
for (File file:
files) {
if(file.isFile()){
sreachStr(file , content);
}else if(file.isDirectory()){
scanFile(file , content);
}else{
;
}
}
}
private static void sreachStr(File file , String content) {
try (InputStream inputStream = new FileInputStream(file)){
StringBuilder stringBuilder = new StringBuilder();
while(true){
byte[] arr = new byte[1024];
int n = inputStream.read(arr);
if(n == -1){
break;
}
String s = new String(arr , 0 , n);
stringBuilder.append(s);
}
if(stringBuilder.indexOf(content) == -1){
}else{
String s= file.getAbsolutePath();
System.out.println("找到文件" + file.getName() +s);
}
}catch (IOException e){
throw new RuntimeException(e);
}
}
}