生成docsify目录
依赖
代码使用的java
需要引入hutool
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.2</version>
</dependency>
代码
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.io.FileUtil;
import java.io.File;
import java.util.Arrays;
import java.util.Objects;
import java.util.stream.Collectors;
/**
* 生成docsify文件菜单
*/
public class DocsifyBuildTreeUtil {
public static void main(String[] args) {
StringBuilder sidebarStr = buildMenu("/Users/hv/devs/idea/learning-notes");
System.out.println(sidebarStr);
}
/**
* 生成菜单
*
* @param pathname
* @return
*/
private static StringBuilder buildMenu(String pathname) {
StringBuilder sidebarStr = new StringBuilder();
builderTree(new File(pathname), sidebarStr, 0, "");
return sidebarStr;
}
/**
* 递归生成菜单
*
* @param rootFile
* @param sidebarStr
* @param tabIndex
* @param prefix
*/
private static void builderTree(File rootFile, StringBuilder sidebarStr, int tabIndex, String prefix) {
// 过滤不需要生成目录的文件
if (rootFile.getName().equals(".git") || rootFile.getName().equals(".idea") || rootFile.getName().equals(".obsidian") || rootFile.getName().equals("docsify")) {
return;
}
// 如果是文件夹,并且文件夹里没有md文件和文件夹则返回
if (rootFile.isDirectory() && CollectionUtil.isEmpty(Arrays.stream(Objects.requireNonNull(rootFile.listFiles())).filter(o -> FileUtil.getSuffix(o.getName()).equals("md") || o.isDirectory()).collect(Collectors.toList()))) {
return;
}
StringBuilder tab = calcTab(tabIndex);
// 生成文件夹层级目录
if (tabIndex > 0) {
sidebarStr.append(calcTab(tabIndex - 1)).append("- ").append(rootFile.getName()).append("\n");
}
// 循环文件生成文件目录
for (File file : Objects.requireNonNull(rootFile.listFiles())) {
String fileName = file.getName();
// fileName = fileName.replaceAll(" ", "-");
// FileUtil.rename(file, fileName, true);
if (file.isDirectory()) {
builderTree(file, sidebarStr, tabIndex + 1, prefix + fileName + "/");
} else {
if (FileUtil.getSuffix(file).equals("md")
&& !fileName.equals("README.en.md")
&& !fileName.equals("README.md")) {
sidebarStr
.append(tab).append("- [").append(fileName.replace(".md", "")).append("](").append(prefix).append(fileName).append(")")
.append("\n");
}
}
}
}
/**
* 计算tab制表符
*
* @param tabIndex
* @return
*/
private static StringBuilder calcTab(int tabIndex) {
StringBuilder tab = new StringBuilder();
for (int i = 0; i < tabIndex; i++) {
tab.append("\t");
}
return tab;
}
}
效果
输出
然后复制到_sidebar.md
最终效果