今天终于能舒服的写博客了

我的博客是使用Hexo静态部署,使用markdown写好文档后放到_posts文件夹里就可以直接部署了。但_posts目录里把所有文档都放在一起没有文件夹归类,因此我的思路是使用Typora写好笔记后存在本地指定目录,定时运行java小程序把目录里的文档全部复制到_posts里并调用cmd命令生成、发布hexo博客,最后把我的存放笔记的目录上传gitee.com中的仓库备份。

推荐使用Typora写markdown,所写即所见,很方便、很优雅。如图:

typora

左侧使用目录的管理方式,可以很方便的在本地写文档。我不太喜欢博客网站中写,需要打开浏览器,访问网站等一系列操作,如断网还保存不了。

这里分享一个使用Typora写hexo博客的小技巧,使用输入法的自定义短语生成文章头部的yaml样式,可自动生成时间 ,我们只需要填写标题,标签,分类即可。


如下图我写好的note按分类放在F:/Markdown目录,在这个目录下面还有一个。java文件与一个bat文件。

本地目录

java文件的作用是把该目录中的所有md复制到hexo中的_posts中然后调用cmd命令进行生成、发布等操作,bat文件的作用主要是设置系统的定时任务调用java小程序,最后把F:Markdown中的文件上传gitee.com仓库备份。

代码比较简单,直接上代码了:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
class DeployBlog {
public static final String HEXO_DIR = "F:/Blog/source/_posts";
public static final String MARKDOWN_DIR = "F:/Markdown";
public static List<File> fileList = new ArrayList<File>();

/**
* 获取Markdown目录中的所有md文件
* @param file
*/
public void getMarkdown(File file) {
if (file.isFile()) {
if (file.getName().indexOf("md") > -1) {
fileList.add(file);
}
} else if (file.isDirectory()) {
if (file.getName() != ".git") {
File[] files = file.listFiles();
if (files != null) {
for (File f : files) {
getMarkdown(f);
}
}
}
}
}

/**
* 将获取到的文件复制到hexo的_posts目录(先清空_posts目录)
*/
public void writeFile() {
File file = new File(HEXO_DIR);
if (!file.exists()) {
file.mkdirs();
}
for (File f1 : file.listFiles()) {
f1.delete();
}
for (File f2 : fileList) {
File dest = new File(file, f2.getName());
try {
Files.copy(f2.toPath(), dest.toPath());
} catch (IOException e) {
e.printStackTrace();
}
}
}

/**
* 执行命令发布并部署
* @return
* @throws Exception
*/
public String deployHexo() throws Exception{
String cmd = "cd " + HEXO_DIR + " && hexo clean && hexo g && hexo d";
List<String> cmds = new LinkedList<String>();
// cmds.add("sh");
cmds.add("cmd.exe");
// cmds.add("-c");
cmds.add("/c");
cmds.add(cmd);
System.out.println("deploy...");
ProcessBuilder pb = new ProcessBuilder(cmds);
//重定向到标准输出
pb.redirectErrorStream(true);
Process p = pb.start();
p.waitFor(3, TimeUnit.SECONDS);
BufferedReader br = new BufferedReader(new InputStreamReader(p.getInputStream()));
StringBuffer sb = new StringBuffer();
String line;
while ((line = br.readLine()) != null) {
sb.append(line).append("\n");
}
String result = sb.toString();
return result;
}

public static void main(String[] args) {
DeployBlog deployBlog = new DeployBlog();
File file = new File(MARKDOWN_DIR);
deployBlog.getMarkdown(file);
deployBlog.writeFile();
try {
String cmdstr = deployBlog.deployHexo();
System.out.println(cmdstr);
}catch (Exception e){
e.printStackTrace();
}
System.out.println("deploy success!");

}
}

关于java中执行cmd命令可以搜索我博客中的文章:Java中执行bat或shell命令.md,其它文件操作比较简单就不多说了。最后使用一个bat完成java的调用。

1
2
3
4
5
6
7
8
9
10
11
12
13
@echo off 
echo 正在更新博客...
javac DeployBlog.java
java DeployBlog

echo 博客更新成功!访问hjwjw.github.io查看
echo ====================================
echo 正在备份笔记...
git add .
git commit -m "backup blog"
git push
echo 备份成功!
choice /T 5 /C ync /CS /D y /n

bat文件内容也比较简单,最后一条是暂停5秒后才关闭窗口。

最后一步是设置windows定时任务,定时执行这个bat文件即可:joy:


虽然方式算不上很高级,技术含量也不是很高,不过我感觉写博客已经很舒适了,使用自己喜欢的Markdown软件,自己的博客,本地写作,自动部署、自动备份。

写在最后:

写Markdown文档最头疼的就是图床了,这里推荐我在用的图床工具,点击直达github:PicGo