个人记笔记所用微盘同步助手即时同步文件,图片文件也是设置默认保存在笔记目录下。markdown 有一个缺点就是纯文本,文档中图片为链接方式,当链接删除,源文件仍会存在于图片文件夹,下列这个程序可以对比并删除冗余的图片或资源文件(假删除,冗余文件将会移动到笔记文件夹中到 回收站 文件夹中,确定要删除时可以将整个文件夹手动删除)。上午问过大家正则,但是真的不怎么会,所以,,还是用最简单的方法展现吧。。大牛可以修改修改甚至弄个桌面程序出来蛤,提前祝 1024 快乐!
public class Main {
static ArrayList<String> list= new ArrayList<>();
static String text;
public static void main(String[] args) {
File file = new File("D:\\微云同步助手\\QQ\\笔记"); //获取其 file 对象
//获取其 file 对象
func(file);
for (String s : list) {
String fileName = s.substring(s.lastIndexOf("\\") + 1, s.length());//获取文件名
if (!text.contains(fileName)){ //如果图片等资源在 md 内容中不存在即删除
System.out.println(fileName+"删除成功");
String hs=file+"\\回收站\\";
if (!new File(hs).exists())
new File(hs).mkdir();
new File(s).renameTo(new File(hs+fileName));
}
}
}
/**
* 遍历目录
* @param file
*/
private static void func(File file) {
File[] fs = file.listFiles();
for (File f : fs) {
if (f.isDirectory() && !f.toString().contains("回收站")) //排除回收站目录
func(f);
if (f.isFile()) { //若是文件,直接打印详细路径
String s = f.toString();
if (s.endsWith(".md")) {//获取 md 文件内容
text += readToString(s);
} else {
list.add(s);
}
}
}
}
/**
* 获取文本
* @param fileName
* @return
*/
public static String readToString(String fileName) {
String encoding = "UTF-8";
File file = new File(fileName);
Long filelength = file.length();
byte[] filecontent = new byte[filelength.intValue()];
try {
FileInputStream in = new FileInputStream(file);
in.read(filecontent);
in.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
return new String(filecontent, encoding);
} catch (UnsupportedEncodingException e) {
System.err.println("The OS does not support " + encoding);
e.printStackTrace();
return null;
}
}
}
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.