最近学 Java Web 的过程又复习了 Java IO 的部分,做到一个遍历文件夹并找出匹配内容关键字文件的练习,突然想到自己之前一直在烦 md 图片管理的问题,就尝试动手了,初期还挺顺利,不过后面的问题越来越超出搜索能解决的范围,现将现状列举如下:
1 遍历 md 文件夹的每一个文件,逐列读取文件内容
2 通过正则表达式匹配 md 文件内的所有图片路径,并逐一打印
3 打印的路径使用字符串列表存储,将其与指定本地的 md 图片文件夹内文件路径做一一对比,标记没有匹配到 md 文件夹对应引用路径的文件并删除
已知匹配 md 图片内的正则表达式是!\\[.*\\]\\(.+\\)
, 那如何在该表达式的基础上提取出括号内的路径?
如果 md 文件内引用的是相对路径,如何找到其绝对路径?
md 文件内图片路径数和本地 md 图片仓库图片路径数各自都有几十条暴力匹配不是问题,但是如果几百几千几万呢?如何构建高效的算法? (对应 3)
答:目前思路是,将两个文件夹的图片路径都按名称排序,这样遍历本地 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
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.