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 ...
随机推荐
- python语言绘图:绘制一组beta分布图
代码源自: https://github.com/PacktPublishing/Bayesian-Analysis-with-Python ============================= ...
- 【安装部署】Apache SeaTunnel 和 Web快速安装详解
版本说明 由于作者目前接触当前最新版本为2.3.4 但是官方提供的web版本未1.0.0,不兼容2.3.4,因此这里仍然使用2.3.3版本. 可以自定义兼容处理,官方提供了文档:https://mp. ...
- 9组-Alpha冲刺-总结
一.基本情况 1.1基本情况(10分): 组长博客链接:https://www.cnblogs.com/Microsoft-hc/p/15585517.html 1.2现场答辩总结 PPT上缺少了组内 ...
- Python网页应用开发神器fac 0.3.0全新版本发布
大家好我是费老师,在Python生态中,有很多以Python为主要开发语言,实现网页应用开发的框架,其中最为知名的有Dash.flet.streamlit.gradio.nicegui等. 如果综合考 ...
- 微服务开发手册之GRPC
荐
GRPC是一个高性能.通用的开源RPC框架,基于HTTP/2协议标准和Protobuf序列化协议开发,支持众多的开发语言. @[TOC] 1 简介 在GRPC框架中,客户端可以像调用本地对象一样直接调 ...
- stm32g070 usart 中断问题: 开启接收中断 RXNEIE 需要注意ISR的错误类型,否则会进入中断。
usart 中断问题: 开启接收中断 RXNEIE 需要注意ISR的错误类型,否则会进入中断. 调试时发现,如果ISR的ORE和FE置位,而此时要是使能RX中断(RXNEIE置位)就会进入中断复位程序 ...
- 【防忘笔记】Spring+Struts2古董框架学习
Spring+Struts2项目框架梳理 若基于Spring+Struts2的方式进行开发,前后端的交互逻辑会与boot系以及MCV的组织结构有所不同 这里是对于学习过程的一些记录 前置通用知识 St ...
- Win32 拆分窗口
前两天学习了MFC的拆分窗口,今天来学习Win32 SDK下如何拆分窗口. win32是没有像MFC那样直接有函数方法拆分窗口,只能自己处理了. 1.在WM_CREATE消息中创建两个控件,TreeV ...
- Win32 SDK 下的TreeCtrl控件的封装
自己照着MFC封装,半月前封装了一半,碰到问题就放下了,今天终于封装好了. [Ctree.h]文件 #pragma once #include <windows.h> #include & ...
- zabbix基本概念
Zabbix是一个企业级的.开源的.分布式监控解决方案. Zabbix可以监控网络和服务的监控状况. Zabbix利用灵活的告警机制,允许用户对事件发送基于Email的告警. 这样可以保证快速的对问题 ...