使用java在指定的目录下实现文件的模糊搜索-问答-阿里云开发者社区-阿里云

开发者社区> 蛮大人123> 正文

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

2016-06-17 13:42:39 3485 1

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

取消 提交回答
全部回答(1)
  • 蛮大人123
    2019-07-17 19:42:34
    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));
        }
    }
    0 0
相关问答

40

回答

[@徐雷frank][¥20]什么是JAVA的平台无关性

大河人家 2018-10-29 23:55:20 144251浏览量 回答数 40

162

回答

惊喜翻倍:免费ECS+免费环境配置~!(ECS免费体验6个月活动3月31日结束)

豆妹 2014-10-29 17:52:21 222952浏览量 回答数 162

8

回答

OceanBase 使用动画(持续更新)

mq4096 2019-02-20 17:16:36 333815浏览量 回答数 8

13

回答

[@饭娱咖啡][¥20]我想知道 Java 关于引用那一块的知识

心意乱 2018-10-31 18:44:12 142128浏览量 回答数 13

110

回答

OSS存储服务-客户端工具

newegg11 2012-05-17 15:37:18 292249浏览量 回答数 110

22

回答

爬虫数据管理【问答合集】

我是管理员 2018-08-10 16:37:41 146757浏览量 回答数 22

18

回答

阿里云开放端口权限

xcxx 2016-07-20 15:03:33 643047浏览量 回答数 18

31

回答

[@倚贤][¥20]刚学完html/css/js的新手学习servlet、jsp需要注意哪些问题?

弗洛伊德6 2018-10-27 21:52:43 145590浏览量 回答数 31

42

回答

【精品问答集锦】Python热门问题

小六码奴 2019-05-30 15:27:34 135474浏览量 回答数 42

10

回答

[@墨玖tao][¥20]为什么流式处理框架都是 java 写成的,JVM 是不是在流和批存在着特殊优势。还有分布式资源调度,感觉Mesos 的成长速度跟不上 Yarn。这是为什么?

管理贝贝 2018-10-23 13:18:03 136116浏览量 回答数 10
+关注
蛮大人123
我说我不帅他们就打我,还说我虚伪
0
文章
7733
问答
推荐问答
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载