我们学过文件File之后就想写一个文件搜索器我写了两个版本的搜索器,第一个是基于控制台的就是我的查找结果要显示在控制台上,这个比较适合初学者学习,另外我又写了一个基于界面的文件搜索器,用起来比较好看,在第二个版本中我使用了皮肤包。
首先看第一个版本,花了不到几分钟就可以搞定的东西结果让我做了很长那个时间,原因是当时递归的时候把文件夹的名称当作了绝对路径给传了进去导致无法正常递归。。。。苍天!!带走我吧。。
public void getInfo(){
//创建输入对象,用于得到控制台的输入信息
Scanner input=new Scanner(System.in);
//提示
System.out.println("请输入查找目录:");
//获得输入
strMulu=input.next();
System.out.println("请输入查找名称:");
strSearchName=input.next();
beginSearch(strMulu);
}
上面是得到目录和查找对象,最关键的是下面的一个函数
public void beginSearch(String root){
//用root创建一个根文件对象
File rootFile=new File(root);
//将根文件夹下的目录或者文件放入数组
File[] subFiles=rootFile.listFiles();
//判断文件夹下的目录是否为空,或者文件夹下没有文件
if(subFiles==null||subFiles.length==0){
return;
}
//对文件夹下的每个文件进行操作
for(int i=0;i<subFiles.length;i++){
//如果子文件是一个文件
if(subFiles[i].isFile()){
//得到文件名称
String FileName=subFiles[i].getName();
//判断文件名称是否包含关键字
if(FileName.contains(strSearchName)){
//获得文件的绝对路径
String path1=subFiles[i].getAbsolutePath();
//将绝对路径加到队列
list.add(path1);
}
}
//如果是文件夹
if(subFiles[i].isDirectory()){
//得到文件夹名称
String FilesName=subFiles[i].getName();
//获得文件夹的绝对路径
String path2=subFiles[i].getAbsolutePath();
//判断文件名称是否包含关键字
if(FilesName.contains(strSearchName)){
//将绝对路径加到队列
list.add(path2);
}
//将子文件夹递归调用,查询下一级文件夹
beginSearch(path2);
}
}
}
public static void main(String[] args) {
FileSearch fl=new FileSearch();
fl.getInfo();
//把队列中的字符串取出来并打印
for(int i=0;i<list.toArray().length;i++){
System.out.println(list.get(i));
}
}
运行的结果为:
具体的代码见附件