您的位置:首页 > 其它

文件夹及子文件夹遍历,并找到内容含有特定字符串的文件

2013-05-11 20:29 323 查看
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();
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: