想知道PHP的功能实现请查看我之前的文章:
php之多级目录下查找文件中是否含有某个字符串功能实现
以下是JAVA措辞实当代码:

package com.yzf.findword;import java.io.;import java.nio.file.Files;import java.nio.file.Path;import java.nio.file.Paths;import java.util.Locale;import java.util.Scanner;import java.util.function.Consumer;/ @author yzf~ @version 1.0 在目录文件中查找指定字符 EncodingDetect类库下载地址: https://pan.baidu.com/s/1A0sU0EdbPHOcnCjz0E4TjA?pwd=tzh4 /public class FindWordInFile { private static int fileCount = 0;//查找到的文件数量 private String findWord = "";//须要查找的字串 private String result = "";//查找的结果 private String notes = "";//提示语 private boolean isFindMore = false;//是否多级目录下查找,默认不开启 / main入口 / public static void main(String[] args) throws IOException { Scanner scanner = new Scanner(System.in); System.out.println("请输入要查找的字符串[查找多个请用竖线“|”隔开]:"); String word = scanner.next(); System.out.println("请输入查找的目录或文件[支持多级目录查找]:"); String path = scanner.next(); System.out.println("是否在多级目录下探求[y/n]:"); String isFindMore = scanner.next(); FindWordInFile fileObj = new FindWordInFile(word, isFindMore); fileObj.findWordInDir(path); System.out.println(fileObj.getResult()); } / 布局器 @param findWord / public FindWordInFile(String findWord, String isFindMore){ this.findWord = findWord; this.isFindMore = isFindMore.toUpperCase(Locale.ROOT).equals("Y") ? true : false; } / 在文件中查找特定字符 @param files 查找的文件绝对路径 / public <F> void findWordInFile(F files) throws IOException { File file = null; String path = ""; if (files instanceof Path) { file = ((Path) files).toFile(); path = file.getPath(); } else { file = new File((String) files); path = (String) files; } if (!(file.exists() && file.isFile())) { notes += path + " [非文件]";return; } if (findWord.isEmpty() || "".equals(findWord)) { notes += path + "查找字符不能为空";return; } if (file.length() == 0) { notes += path + " [空文件]";return; } //得到文件编码格式 String fileCode = EncodingDetect.getJavaEncode(path); fileCode = fileCode!=null&&!"".equals(fileCode) ? fileCode : "UTF8"; //读取文件数据 BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(path), fileCode)); //将字符串通过竖线|分割,以支持多个字符串查询 String[] strArr = findWord.split("\\|"); String readRes = null;//用于存储读到的结果 //遍历字符串数组 for (int i = 0; i < strArr.length; i++) { int line = 1;//记录行数 while ((readRes = br.readLine()) != null) {//读取一行 int location = readRes.indexOf(strArr[i]);//匹配字符串是否在该行中 if ( location != -1 ) {//判断匹配结果 result += path+" [第 "+line+" 行的第"+location+"位查找到字符:"+strArr[i]+"]\r\n"; break;//匹配到字符串,进入下一个字符串匹配 } line++; } } br.close();//关闭资源 if ("".equals(result)) { notes += "文件中没有查找到指定字符";return; } } / 在目录文件下中查找特定字符 @param path 查找的文件绝对路径 / public void findWordInDir(String path) throws IOException { //判断路径是否位目录 File dir = new File(path); if (dir.isDirectory()) {//目录 File[] files; if (this.isFindMore) {//多级目录下查找 files = dir.listFiles(); for (File file :files) { if (file.isDirectory()) { findWordInDir(file.toString()); } else { findWordInFile(file.toString()); } } } else {//当前目录文件下查找 Files.list(Paths.get(path)).filter(Files::isRegularFile).forEach(new Consumer<Path>() { @Override public void accept(Path path) { try { findWordInFile(path); } catch (IOException e) { e.printStackTrace(); } } }); } } else if (dir.isFile()) {//文件 findWordInFile(path); } } public String getResult() { return result; } public String getNotes() { return notes; }}
运行结果:
好了,欢迎小伙伴们留言评论。