利用Java语言的文件基本操作和文件读写内容对包含关键字的文件进行查找路径操作
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class 全文解锁 {
public static void main(String[] args) throws IOException {
//1.用户输入待搜索的路径和关键词
//2.遍历目录和文件进行查找
Scanner scanner=new Scanner(System.in);
System.out.println("请输入要扫描的根路径");
String rootDir=scanner.next();
File rootFile=new File(rootDir);
if(!rootFile.isDirectory()){
System.out.println("目录不存在");
return;
}
System.out.println("请输入查询的关键词");
String query=scanner.next();
//遍历文件进行匹配
List <File>result=new ArrayList<>();
scanDirWithContent(rootFile,query,result);
for ( File F:result
) {
System.out.println(rootFile.getCanonicalPath());
}
}
private static void scanDirWithContent(File rootFile, String query, List<File> result) {
File[]files=rootFile.listFiles();
if(files==null||files.length==0){
return;
//空的目录直接返回
}
for (File f:files) {
if(f.isDirectory()){
scanDirWithContent(f,query,result);
}else {
//文件名是否包含关键字
if (f.getName().contains(query)) {
result.add(f);
}
//文件内容是否包含关键字
else if(isContains(f,query)){
result.add(f);
}
}
}
}
public static boolean isContains(File f,String query){
StringBuilder stringBuilder=new StringBuilder();
try(InputStream inputStream= new FileInputStream(f)){
Scanner scanner=new Scanner(inputStream,"UTF-8");
while (scanner.hasNextLine()){
String line=scanner.nextLine();
stringBuilder.append(line+"\n");
}
}
catch (IOException e){
e.printStackTrace();
}
return stringBuilder.indexOf(query)!=-1;
}
}