尝试自己实现一个清除 md 文件夹内孤儿图片的工具遇到的问题求解

2021-09-16 17:47:11 +08:00
 tracker647

动机:

最近学 Java Web 的过程又复习了 Java IO 的部分,做到一个遍历文件夹并找出匹配内容关键字文件的练习,突然想到自己之前一直在烦 md 图片管理的问题,就尝试动手了,初期还挺顺利,不过后面的问题越来越超出搜索能解决的范围,现将现状列举如下:

实现思路:

1 遍历 md 文件夹的每一个文件,逐列读取文件内容

2 通过正则表达式匹配 md 文件内的所有图片路径,并逐一打印

3 打印的路径使用字符串列表存储,将其与指定本地的 md 图片文件夹内文件路径做一一对比,标记没有匹配到 md 文件夹对应引用路径的文件并删除

难点:

实现代码

测试结果

public static void main(String[] args) throws IOException {
          searchFolder("E:\\AARON\\myNetNotes\\Book-Audio-Game-Recording","!\\[.*\\]\\(.+\\)");
    }

    public static void searchFolder(String path, String regex) {
        File target = new File(path);
        if(!target.exists()){
            System.out.println("No such file or Directory!");
            return;
        }
        File[] list = target.listFiles();
        for(File f : list){
            try {
                Scanner sc = new Scanner(new FileReader(f));
                String traceStr = new String();
                Pattern pattern = Pattern.compile(regex);
//                逐字读取文件内容,寻找匹配的部分
                while(sc.hasNext()){
                    traceStr += sc.next();
                    if(pattern.matcher(traceStr).find()){
                        System.out.println(traceStr + " " + f.getName() );
                        traceStr = "";
                    }
                }
            }
            catch (IOException e){
                e.printStackTrace();
            }
        }
    }
![]( https://gitee.com/tracker647/typora-pic/raw/master/img/image-20210809101032399.png) @图书 @@中断 @代码简洁之道-Robert.C.Martin.md
![image-20210808105119037]( https://gitee.com/tracker647/typora-pic/raw/master/img/image-20210808105119037.png) @图书 @@在看 @算法 4#Programming Life##数据结构与算法#.md
![image-20210807151233776]( https://gitee.com/tracker647/typora-pic/raw/master/img/image-20210807151233776.png) @图书 @@看完 @C Primer Plus#Programming Life#.md
![Snipaste_2021-08-09_20-58-01](../typora-user-images/Snipaste_2021-08-09_20-58-01.png) @图书 @@看完 @分析与思考.md
![image-20210807161124948]( https://gitee.com/tracker647/typora-pic/raw/master/img/image-20210807161124948.png) @图书 @@看完 @分析与思考.md
![image-20210807161124948]( https://gitee.com/tracker647/typora-pic/raw/master/img/image-20210807161124948.png) @图书 @@看完 @君主论.md
![image-20210807154606701]( https://gitee.com/tracker647/typora-pic/raw/master/img/image-20210807154606701.png) @图书 @@看完 @影响力.md
![img](file:///C:\Users\hw\AppData\Local\Temp\ksohtml15116\wps1.jpg) @图书 @@看完 @编码:隐匿在计算机软硬件背后的语言#计算机通识#.md
![image-20210807161737900]( https://gitee.com/tracker647/typora-pic/raw/master/img/image-20210807161737900.png) @影视 @@看完 @动物新世代 BNA.md
![image-20210807161916802]( https://gitee.com/tracker647/typora-pic/raw/master/img/image-20210807161916802.png) @影视 @@看完 @小偷家族.md
![image-20210807162338711]( https://gitee.com/tracker647/typora-pic/raw/master/img/image-20210807162338711.png) @影视 @@看完 @新世纪福音战士.md
![image-20210807162114203]( https://gitee.com/tracker647/typora-pic/raw/master/img/image-20210807162114203.png) @影视 @@看完 @时光代理人.md

Process finished with exit code 0

699 次点击
所在节点    问与答
2 条回复
pupboss
2021-09-16 18:25:16 +08:00
任务拆解方面可以提高一点,降低你实现的复杂度

你把所有图片 url 匹配出来,这存成一个数组

再把本地图片文件夹遍历一下,存成另一个数组

假设你的本地图片只会多不会缺,你把两个数组求差就行了,随后删除本地文件

我上周刚做过,你可以参考下实现: https://www.pupboss.com/post/2021/blog-optimization-ghost-routing-rss-darkmode/#topic-3
ysc3839
2021-09-16 21:43:20 +08:00
1. Capturing group,简单说就是给要提取的部分加上括号 https://regex101.com/r/ZCdrFB/1
2. 你有 md 文件的路径吧?那配合路径操作的库就能实现了。
3. 我的想法是 hash set 。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/802351

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX