md转换成_post下直接使用的文件
md转换成_post下直接使用的文件
package org.example;
import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.attribute.BasicFileAttributes;
import java.time.Instant;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
public class Main {
enum FileTime {
CREATE, MODIFY, ACCESS;
}
/*
---
title: 排序
date: 2023-09-03 13:14:22 +0800
categories: [algorithm, summary]
tags: [自定义标签1, 自定义标签2]
media_subpath: /assets/media/pictures/
description: haha
---
*/
public static final String FILE_PATH = "C:\\Users\\Spring\\Downloads\\algorithm";
public static final String DATE_PATTERN = "yyyy-MM-dd hh:mm:ss";
// md 文档中所有图片路径的父路径
public static final String MEDIA_SUB_PATH = "/assets/media/pictures/";
public static void main(String[] args) throws Exception {
File file = new File(FILE_PATH);
traverseDirectory(file);
}
public static void main2(String[] args) throws IOException {
String s = "C:\\Users\\Spring\\Downloads\\algorithm\\summary\\链表反转.md";
File file = new File(s);
if (isMdFile(file.getName()))
System.out.println(getFileTime(new File(s), FileTime.MODIFY));
}
// 将 markdown 文件转换成可以直接放在 _posts 文件夹下发布的文件
public static void convert(File file) throws Exception {
String dateStr = getFileTime(file, FileTime.MODIFY);
String originFileName = file.getName();
// 插入前页
insertFrontMatter(file, dateStr, originFileName);
// 加前缀
addDatePrefix(file, dateStr);
}
public static void insertFrontMatter(File file, String dateStr, String originFileName) throws Exception {
String inserted = "---\n" +
"title: " + getName(originFileName) + "\n" +
"date: " + dateStr + " +0800\n" +
"categories: " + "[" +
"]\n" +
"tags: " + "[" +
"]\n" +
"media_subpath: " + MEDIA_SUB_PATH + "\n" +
"description: " +
"\n" +
"---\n";
insertFileHeader(inserted.getBytes(StandardCharsets.UTF_8), file);
}
// 给文件增加日期前缀
public static void addDatePrefix(File file, String dateStr) {
String newName = file.getParent() + "\\" + dateStr.split(" ")[0] + "-" + file.getName();
File newFile = new File(newName);
if (!file.renameTo(newFile))
System.out.println("rename error");
}
private static void insertFileHeader(byte[] header, File file) throws Exception {
RandomAccessFile src = new RandomAccessFile(file, "rw");
int srcLength = (int) src.length();
byte[] buff = new byte[srcLength];
src.read(buff, 0, srcLength);
src.seek(0);
src.write(header);
src.seek(header.length);
src.write(buff);
src.close();
}
private static String getFileTime(File file, FileTime fileTime) throws IOException {
if (file == null) return null;
Path path = file.toPath();
BasicFileAttributes attr = Files.readAttributes(path, BasicFileAttributes.class);
if (attr == null) return null;
Instant instant = null;
switch (fileTime) {
// 创建时间
case CREATE:
instant = attr.creationTime().toInstant();
break;
// 更新时间
case MODIFY:
instant = attr.lastModifiedTime().toInstant();
break;
// 上次访问时间
case ACCESS:
attr.lastAccessTime().toInstant();
break;
default:
}
if (instant == null) return null;
return DateTimeFormatter.ofPattern(DATE_PATTERN).withZone(ZoneId.systemDefault()).format(instant);
}
private static void traverseDirectory(File directory) throws Exception {
// 列出目录下的所有文件和子目录
File[] filesAndDirs = directory.listFiles();
if (filesAndDirs == null) return;
// 遍历每个文件和子目录
for (File fileOrDir : filesAndDirs) {
if (fileOrDir.isFile()) {
// 是 markdown 文件才处理
if (isMdFile(fileOrDir.getName())) {
convert(fileOrDir);
}
} else if (fileOrDir.isDirectory()) {
// 如果是目录,递归遍历子目录
traverseDirectory(fileOrDir);
}
}
}
// 去除扩展名
private static String getName(String fileName) {
return fileName.substring(0, fileName.lastIndexOf('.'));
}
// 判断是否是 markdown 文件
private static boolean isMdFile(String fileName) {
String extension = fileName.substring(fileName.lastIndexOf('.'));
return ".md".equals(extension) || ".markdown".equals(extension);
}
}
md转换成_post下直接使用的文件的更多相关文章
- 把ASM下的HDD VM转换成ARM下Managed Disk的SSD VM
在ASM下,要把HDD的VM转换成SSD的VM步骤非常复杂.需要手工把Disk从普通存储账户复制到高级存储账户.再通过这个Disk创建VM. 目前在有了ASM到ARM的迁移工具,以及Managed D ...
- Android网络图片转换成bitmap保存到本地指定文件夹
下列代码,请求网络图片转换为bitmap,然后保存到指定文件夹,微信,QQ分享,要求缩略图不大于32kb 压缩图片代码,使用了Glide来进行图片压缩处理 Glide.get(ShopDetailsA ...
- 将任意音频格式文件转换成16K采样率16bit的wav文件
此转换需要使用ffmpeg 假设有目录 d:\录音 目录有 张三.m4a, 李四.m4a xxx.m4a(其他任意格式音频触类旁通可以把 *.m4a改成*.*).批量转换成采样率16K,有符号,16b ...
- 将DataSet(DataTable)转换成JSON格式(生成JS文件存储)
public static string CreateJsonParameters(DataTable dt) { /**/ /**/ /**/ /* /*********************** ...
- windows下的txt格式转换成linux下的TXT
存在的问题是 多出一个方框或者黑格子 主要是因为bash 不能忽略windows的问题 用sed 命令来处理,分别是windows转linux,linux转windows sed -e 's/.$// ...
- 图片转换成Base64编码集成到html文件
首先为什么要这么做? 原因很简单这样可以减少与服务器的请求,当然对于一些浏览器并不支持,如IE8.通常用在手机版网站中,具体转化方法如下: 1.在线打开Base64的编码器将图片编码成Base64 ...
- python csv文件转换成xml, 构建新xml文件
csv文件 code from xml.etree.ElementTree import Element,ElementTree,tostring import json,csv def csvtox ...
- MD 使用 i5ting_toc 转换成 HTML
MD 使用 i5ting_toc 转换成 HTML 本文作者:天析 作者邮箱:2200475850@qq.com 发布时间: Wed, 10 Jul 2019 13:59:00 +0800 前言 md ...
- 在windows 下将 chm 格式的文件 转换成 html 的文件
有时我们可能需要将 chm 格式的文件 转换成 html 格式的网页文件,这时,如果你使用的是 windows 操作系统,那就可以用 windows 操作系统自带的反编译工具来完成这项任务,具体步骤: ...
- 使用pyInstaller发布PathMerge的exe版本(py转换成exe)
前言 PathMerge是用python写的一个辅助文件夹合并的小工具,它的特点是不用担心合并后文件会丢失,旧文件会创建副本保存下来,除非你手动删除. 详情见:python开发目录合并小工具 Path ...
随机推荐
- WSL启动nvidia-docker镜像:报错libnvidia-ml.so.1- file exists- unknown
参考: https://blog.csdn.net/xujiamin0022016/article/details/124782913 https://zhuanlan.zhihu.com/p/361 ...
- WhaleStudio 2.6正式发布,WhaleTunnel同步性能与连接器数量再创新高!
在这个数据驱动的大模型时代,数据集成的作用和意义愈发重要.数据不仅仅是信息的载体,更是推动企业决策和创新的关键因素.作为全球最流行的批流一体数据集成工具,WhaleTunnel随着WhaleStudi ...
- 代码随想录Day19
235. 二叉搜索树的最近公共祖先 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先. 百度百科中最近公共祖先的定义为:"对于有根树 T 的两个结点 p.q,最近公共祖先表示为一个 ...
- js_问题记录2022年6月24日19:35:12
小问题中的大问题 新建子js脚本一定记得创建函数,不然写什么都无法实现 比如 新建了new1.js脚本,首先需要创建function后才能在里面进行参数操作和调用 js实现的功能: 获取到对应的id= ...
- 巴特沃斯LPF设计(硬件电路实现)
高阶 (2n) VSVC单位增益巴特沃斯低通滤波器设计,可分解为 n 个二阶低通,通过对这多个二阶低通的组合优化,可提高滤波器的低通特性和稳定性. 串联的传递函数是各个二阶滤波器传递函数的乘积:\({ ...
- 【YashanDB知识库】收集分区表统计信息采样率小于1导致SQL执行计划走偏
[问题分类]性能优化,BUG [关键字]分区表,统计信息,采样率 [问题描述]收集表(分区表)级别的统计信息时,如果采样率小于1,dba_ind_statistics中partition_name i ...
- Vue SPA项目如何修改网站标题
直接贴 门户项目代码 // 全局router 直接挂载路由导航守卫 router.beforeEach((to, from, next) => { if (to.meta.title) { va ...
- 【笔记】Tapable源码解析图以及webpack怎样实现一个插件plugin
Tapable源码解析图,如图所示: 一个webpack plugin由一下几个步骤组成: 一个JavaScript类函数. 在函数原型 (prototype)中定义一个注入compiler对象的ap ...
- 深度学习Python代码小知识点(备忘,因为没有脑子)
现在是2024年4月24日16:58,今天摸鱼有点多,备忘一下,都写到一篇内容里面,免得分散. 1. np.concatenate()函数'np.concatenate'是NumPy库中用来合并两个或 ...
- OData – 权限管理
前言 OData 其实没有权限的机制, Client 可以任意的 $select, $expand. 即便它可以做简单防御设置, 但是离平常的业务需求还是很远. 一般上 query entity 常见 ...