文件夹及子文件夹遍历,并找到内容含有特定字符串的文件
import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.sql.Time; import java.sql.Timestamp; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashSet; import java.util.LinkedList; import java.util.List; public class test { private static int count; public static void main(String[] args) { long begin=System.currentTimeMillis(); getFile01(new File("D:/work/"),"String"); // getFile02(new File("D:/work/"),"String"); long end=System.currentTimeMillis(); System.out.println(end-begin); System.out.println(count); } //递归遍历文件夹 public static void getFile01(File f,String str){ //判断f是否为null if(f==null){ System.out.println("路径为空,重新传入"); return; //判断f是否非文件夹 }else if(f.isFile()){ System.out.println("路径非文件夹,请重新传入"); return; //判断f是否 存在 }else if(!f.exists()){ System.out.println("无此路径,请重新输入"); return; } //列出当前文件夹下的所有文件和文件夹 File[] fs=f.listFiles(); BufferedReader bfr=null; String line=""; //循环遍历所有文件和文件夹 for (int i = 0; i < fs.length; i++) { //判断是否是文件 if(fs[i].isFile()){ containStr(fs[i], str); //如果是文件夹,就递归调用本方法 }else{ getFile01(fs[i],str); } } } //采用队列的方法进行查找 public static void getFile02(File f,String str){ //判断f是否为null if(f==null){ System.out.println("路径为空,重新传入"); return; //判断f是否非文件夹 }else if(f.isFile()){ System.out.println("路径非文件夹,请重新传入"); return; //判断f是否 存在 }else if(!f.exists()){ System.out.println("无此路径,请重新输入"); return; } LinkedList<File> list=new LinkedList<File>(); //列出当前文件夹下的所有文件和文件夹 File[] fs=f.listFiles(); for (int i = 0; i < fs.length; i++) { if(fs[i].isDirectory()){ list.add(fs[i]); }else{ containStr(fs[i], str); } } File temp=null; while(!list.isEmpty()){ temp=list.removeFirst(); if(temp.isFile()){ containStr(temp,str); }else{ File[] files=temp.listFiles(); if(files==null){ continue; } for (int i = 0; i < files.length; i++) { if(files[i].isDirectory()){ list.add(files[i]); }else{ containStr(files[i], str); } } } } } public static void containStr(File f,String str){ if(str==null||(str!=null&&str.equals(""))){ System.out.println("test.containStr()"+"请输入合法的字符串"); return; }else if(!f.isFile()){ System.out.println("test.containStr()"+"非文件夹,请重新输入"); } BufferedReader bfr=null; String line=""; try { bfr=new BufferedReader(new FileReader(f)); //读取一段 line=bfr.readLine(); //循环读取每一段,判断其中是否含有字符串str,如果含有,就打印出来此完整文件名,并终止此循环读取 while(line!=null){ if(line.indexOf(str)!=-1){ System.out.println(f.getCanonicalPath()); count++; break; } line=bfr.readLine(); } }catch (FileNotFoundException e) { e.printStackTrace(); }catch (IOException e) { e.printStackTrace(); } } }