网站首页 > 精选教程 正文
之前通过PHP实现了多级目录下查找文件是否含有某个字符串的功能,就想着最近在开发JAVA项目,用JAVA语言能不能也开发一个呢?于是乎就动手开干。
想知道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;
}
}
运行结果:
好了,欢迎小伙伴们留言评论。
猜你喜欢
- 2024-10-31 Java 8 列出目录中的所有文件 java统计所有目录下文件个数
- 2024-10-31 Eclipse 创建 Java 项目 eclipse创建java项目有红叉
- 2024-10-31 Java常用工具下载路径 java下载地址在哪
- 2024-10-31 java 读取jar里面的配置文件 读取jar包外properties文件
- 2024-10-31 以下是一份较为完整的 Java 语言学习路径规划:
- 2024-10-31 java中读取properties文件最简单的方法
- 2024-10-31 基于Java的学生课程选课管理系统:项目目录结构 #vue
- 2024-10-31 java 代码里读取jar包下resources目录下的文件
- 2024-10-31 现互联网大厂程序员,给你一份Java开发学习路径
- 2024-10-31 「JAVA」三种方式加载本地资源文件:绝对路径、类路径、当前路径
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)