开发者社区> 问答> 正文

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

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

展开
收起
蛮大人123 2016-06-17 13:42:39 5640 0
1 条回答
写回答
取消 提交回答
  • 我说我不帅他们就打我,还说我虚伪
    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));
        }
    }
    2019-07-17 19:42:34
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载