java在文本中找字符串,Java 快速查找,从众多文本中查找含有某字符串的文件有哪几个...

Java 快速查找,从众多文本中查找含有某字符串的文件有哪几个

发布时间:2018-10-26作者:laosun阅读(2430)

0f9e8264915948f7a1174b4a48c40c63.gif

快速从众多的文件中,查询哪个文件含有这句话。快速从文件中查找出含有这句话的文件是哪几个

最近博主有一个需求,就是从300多个配置文件中,找出那项配置在哪个文件中,相信一般的才做可能会非常麻烦,虽然有的工具有个功能就是查找打开的文件,但是首先你得全部打开。博主无奈之下,自己写了一个小程序进行查找。

如下:FindInFile.javaimport java.io.BufferedReader;

import java.io.File;

import java.io.FileNotFoundException;

import java.io.FileReader;

import java.io.IOException;

import java.util.ArrayList;

import java.util.HashSet;

import java.util.List;

import java.util.Set;

/**

* Java 匹配字符串在哪个文件中

*

* @author sun

*/

public class FindInFile {

private static final String PATH = "/Applications/Navicat Premium.app/Contents/Resources/zh-Hans.lproj/";// 检索目录

private static final List suffixList = new ArrayList<>();// 需要统计的文件名后缀

private static final Set fileList = new HashSet<>();// 匹配的文件名

private static final String content = "网格查看";// 需要查找的内容

private static int fileCount = 0;

static {

suffixList.add("strings");// 从后缀为.setting的文件中进行查找

}

public static void main(String[] args) {

long s = System.currentTimeMillis();

File file = new File(PATH);

getAllFile(file);

if (fileList != null && fileList.size() > 0) {

System.out.println("一共查询 "+fileCount+" 个文件");

System.out.println("含有 " + content + " 内容的文件如下:");

for (File f : fileList) {

System.out.println(f.getAbsolutePath());

}

} else {

System.err.println("无文件含有 " + content + " 内容");

}

long e = System.currentTimeMillis();

System.out.println("\n总耗时:" + (e - s));

}

public static void getAllFile(File file) {

BufferedReader br = null;

String s = null;

if (file.isDirectory()) {

File[] files = file.listFiles();

for (File f : files) {

getAllFile(f);

}

} else {

if (file.getName().indexOf(".") != -1) {

String suffix = file.getName().substring(

file.getName().lastIndexOf(".") + 1);

if (suffixList.contains(suffix)) {

fileCount++;

try {

br = new BufferedReader(new FileReader(file));

while ((s = br.readLine()) != null) {

if (s.contains(content)) {

fileList.add(file);

break;

}

}

br.close();

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

}

}

}

}

输出结果如下:

一共查询 377 个文件

含有 网格查看 内容的文件如下:

/Applications/Navicat Premium.app/Contents/Resources/zh-Hans.lproj/SQLResultDatasetModule.strings

/Applications/Navicat Premium.app/Contents/Resources/zh-Hans.lproj/TableViewViewController.strings

总耗时:153

af499b9437efec8e1b25c2bb396e60d7.png

1 +1

版权声明

分享到:

发表评论

请文明留言

发表

共 0 条评论

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值