模拟类似linux:find . -name "*.*" |xargs grep -i "搜索字符串"
来源:互联网 发布:javascript eval json 编辑:程序博客网 时间:2024/06/05 00:53
package com.util.exam;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class FindOneStrOnFile {
/**
* @param args
*/
public static List iterator(String path,String[] regs){
List result=new ArrayList();
File f=new File(path);
File[] fs=f.listFiles();
int count=0;
String tongjijieguo="";
for(int i=0;i<fs.length;i+=1){
File ff=fs[i];
if(ff.isDirectory()){
//iterator(ff.getPath(),regs);
continue;
}
boolean flag=false;
for(int j=0;j<regs.length;j+=1){
count=find(ff,regs[j]);
tongjijieguo=regs[j]+"出现次数:"+count+";";
if(count!=0){
flag=true;
}else{
flag=false;
break;
}
}
if(flag){
result.add(ff.getPath()+": "+tongjijieguo);
}
}
return result;
}
private static int find(File file,String reg){
FileInputStream fis=null;
BufferedReader br=null;
String sbf = "";
int count=0;
try{
fis=new FileInputStream(file.getPath());
br=new BufferedReader(new InputStreamReader(fis));
String line=null;
while((line=br.readLine())!=null){
sbf=sbf+""+line;
}
Pattern p = Pattern.compile(reg);
Matcher m = p.matcher(sbf);
while (m.find()) {
count++;
}
}catch(Exception e){
e.printStackTrace();
}finally{
if(br!=null)try{br.close();}catch(Exception e){}
if(fis!=null)try{fis.close();}catch(Exception e){}
}
return count;
}
public static List iteratorDetail(String path,String[] regs){
List result=new ArrayList();
File f=new File(path);
File[] fs=f.listFiles();
for(int i=0;i<fs.length;i+=1){
String detailMsg="";
String detailMsgAll="";
File ff=fs[i];
if(ff.isDirectory()){
List l=iteratorDetail(ff.getPath().replaceAll("////","////////"),regs);
result.addAll(l);
continue;
}
boolean flag=false;//匹配标识
for(int j=0;j<regs.length;j+=1){
detailMsg=findDetail(ff,regs[j]);
detailMsgAll=detailMsgAll+detailMsg;
if(!detailMsg.equals("")){
flag=true;
}else{
flag=false;
break;
}
}
if(flag){
String[] detail=detailMsgAll.split("~");
for(int k=0;k<detail.length;k++){
result.add(ff.getPath()+": "+detail[k]);
}
}
}
return result;
}
private static String findDetail(File file,String reg){
FileInputStream fis=null;
BufferedReader br=null;
String detailMsg="";
try{
fis=new FileInputStream(file.getPath());
br=new BufferedReader(new InputStreamReader(fis));
String line=null;
int count=1;
while((line=br.readLine())!=null){
if(line.matches(".*"+reg+".*")){
detailMsg=detailMsg+"行号:"+count+" "+line+"~";
}
count++;
}
}catch(Exception e){
e.printStackTrace();
}finally{
if(br!=null)try{br.close();}catch(Exception e){}
if(fis!=null)try{fis.close();}catch(Exception e){}
}
return detailMsg;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
String[] regs={"str"};//支持多项查询
String path="C://Documents and Settings//Administrator//桌面//cs";//父目录
List l=iterator(path,regs);
for(int i=0;i<l.size();i++){
System.out.println(l.get(i));
}
List l1=iteratorDetail(path,regs);
for(int i=0;i<l1.size();i++){
System.out.println(l1.get(i));
}
}
}
---------------------------------------------知识点归总------------------------------------------
1 将windows系统路径的单斜杠替换成双斜杠以满足java语法需要
string.replaceAll("////","////////");
2 利用java正则类匹配字符:
Pattern p = Pattern.compile(reg);
Matcher m = p.matcher(sbf);
while (m.find()) {
count++;
}
3 递归调用文件目录
- 模拟类似linux:find . -name "*.*" |xargs grep -i "搜索字符串"
- find -name "*" |xargs grep "xxx" ubuntu搜索
- 模拟类似linux:find . -name "*.*"
- linux 的 find,xargs,grep
- linux查找技巧: find grep xargs
- linux查找技巧: find grep xargs
- linux查找技巧: find grep xargs
- linux查找技巧: find grep xargs
- linux查找技巧: find grep xargs
- linux查找技巧: find grep xargs
- linux查找技巧: find grep xargs
- Linux find grep cat xargs命令学习
- 114 linux shell find grep xargs学习
- find ./www/ -type f -name "*.php" | xargs grep "phpinfo"
- find . -name \* -type f -print | xargs grep “关键字”
- find xargs grep ...
- grep 、find、xargs使用方法
- find |xargs |grep命令
- 深入Android【八】—— Activity间数据传输
- tail 命令
- Fcitx 4 初始使用(ubuntu 10.04)
- 马丁.尼莫拉牧师 波士顿犹太人大屠杀纪念碑铭文 1945年
- 将固定格式的字符串替换成相应格式
- 模拟类似linux:find . -name "*.*" |xargs grep -i "搜索字符串"
- 点量视频网站真实视频地址解析嗅探组件内核 BT源码
- 描绘线程安全性
- hibernate事务管理 (jdbc jta)
- Item 48 TMP编程介绍
- 点量BT(DLBT)-- 致力于最专业的BT内核DLL库
- 获取android2.2的联系人及电话号码
- vc++ MFC 一些控件使用
- 内置类型表