2 a648479630 a648479630 于 2015.06.19 13:46 提问

[求助]使用java在指定的目录下实现文件的模糊搜索

一、功能要求:
用户单击“选择地址”按钮,程序自动打开文件夹选择器(如图2),用户选定用户选择目标文件夹后,输入文件名(可包含“*”表示任意连续多个字符,“?”示任意一个字符),选择文件的扩展名。程序自动获取指定目录下满足条件的所有文件,并显示在窗体中(如图1)。
二、关键技术:
首先获取指定目录下的文件数组,再从该数组中查询满足条件的文件。
三、实现的图形用户界面如下:
![图片说明](http://img.ask.csdn.net/upload/201506/19/1434692767_590496.png)图片说明

2个回答

tongyi55555
tongyi55555   2015.06.19 21:59
已采纳

已经基本实现了。我发布到我的博客了,你看下。

http://blog.csdn.net/tongyi55555/article/details/46565531

zrk1000
zrk1000   2015.06.19 20:40
 package test;

import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Pattern;

public class SearchFile {

    private List<String> resultLsit = new ArrayList<String>();

    private String fileName = null;

    public SearchFile(){
    }

    public SearchFile(String basePaht,String regex,String suffix){
        this.SearchFlieList(basePaht, regex, suffix);
    }

    public void SearchFlieList(String basePaht,String matchStr,String suffix){
        File root = new File(basePaht);
        if(root!=null&&root.listFiles()!=null)
            for(File file:root.listFiles()){
                if(file.isDirectory())  
                    SearchFlieList(file.getAbsolutePath(),matchStr,suffix);
                else if(file.isFile()&&file.getName().endsWith(suffix)){
                        fileName = file.getName().contains(".")?file.getName().substring(0,file.getName().lastIndexOf(".")):file.getName();
                        if(matching(matchStr,fileName))
                            resultLsit.add(file.getAbsolutePath());
                }
            }
    }

    private boolean matching(String matchStr,String targerStr){
        matchStr = matchStr.replaceAll("\\*", ".*").replaceAll("\\?", "\\.");
        try {
            if(Pattern.compile(matchStr).matcher(targerStr).matches())
                return true;
        } catch (Exception e) {
            return false;
        }
        return false;
    }


    public List<String> getResultLsit() {
        return resultLsit;
    }

    public void setResultLsit(List<String> resultLsit) {
        this.resultLsit = resultLsit;
    }

    public static void main(String[] args) {
        Long start = System.currentTimeMillis();
        SearchFile searchFile = new SearchFile("d:/", "*ant*", ".jar");
        for (String string : searchFile.getResultLsit()) {
            System.out.println(string);
        }
        System.out.println("耗时:"+(System.currentTimeMillis()-start));
    }
}

Csdn user default icon
上传中...
上传图片
插入图片