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下直接使用的文件的更多相关文章

  1. 把ASM下的HDD VM转换成ARM下Managed Disk的SSD VM

    在ASM下,要把HDD的VM转换成SSD的VM步骤非常复杂.需要手工把Disk从普通存储账户复制到高级存储账户.再通过这个Disk创建VM. 目前在有了ASM到ARM的迁移工具,以及Managed D ...

  2. Android网络图片转换成bitmap保存到本地指定文件夹

    下列代码,请求网络图片转换为bitmap,然后保存到指定文件夹,微信,QQ分享,要求缩略图不大于32kb 压缩图片代码,使用了Glide来进行图片压缩处理 Glide.get(ShopDetailsA ...

  3. 将任意音频格式文件转换成16K采样率16bit的wav文件

    此转换需要使用ffmpeg 假设有目录 d:\录音 目录有 张三.m4a, 李四.m4a xxx.m4a(其他任意格式音频触类旁通可以把 *.m4a改成*.*).批量转换成采样率16K,有符号,16b ...

  4. 将DataSet(DataTable)转换成JSON格式(生成JS文件存储)

    public static string CreateJsonParameters(DataTable dt) { /**/ /**/ /**/ /* /*********************** ...

  5. windows下的txt格式转换成linux下的TXT

    存在的问题是 多出一个方框或者黑格子 主要是因为bash 不能忽略windows的问题 用sed 命令来处理,分别是windows转linux,linux转windows sed -e 's/.$// ...

  6. 图片转换成Base64编码集成到html文件

    首先为什么要这么做?  原因很简单这样可以减少与服务器的请求,当然对于一些浏览器并不支持,如IE8.通常用在手机版网站中,具体转化方法如下: 1.在线打开Base64的编码器将图片编码成Base64 ...

  7. python csv文件转换成xml, 构建新xml文件

    csv文件 code from xml.etree.ElementTree import Element,ElementTree,tostring import json,csv def csvtox ...

  8. MD 使用 i5ting_toc 转换成 HTML

    MD 使用 i5ting_toc 转换成 HTML 本文作者:天析 作者邮箱:2200475850@qq.com 发布时间: Wed, 10 Jul 2019 13:59:00 +0800 前言 md ...

  9. 在windows 下将 chm 格式的文件 转换成 html 的文件

    有时我们可能需要将 chm 格式的文件 转换成 html 格式的网页文件,这时,如果你使用的是 windows 操作系统,那就可以用 windows 操作系统自带的反编译工具来完成这项任务,具体步骤: ...

  10. 使用pyInstaller发布PathMerge的exe版本(py转换成exe)

    前言 PathMerge是用python写的一个辅助文件夹合并的小工具,它的特点是不用担心合并后文件会丢失,旧文件会创建副本保存下来,除非你手动删除. 详情见:python开发目录合并小工具 Path ...

随机推荐

  1. centos 查看jdk 安装路径

    命令行: which java 输出: /usr/bin/java 再次输入: ls -lr /usr/bin/java 输出: lrwxrwxrwx 1 root root 22 4月 26 17: ...

  2. 第 358 场周赛 - 力扣(LeetCode)

    第 358 场周赛 - 力扣(LeetCode) 2815. 数组中的最大数对和 - 力扣(LeetCode) 双for遍历即可 class Solution { public: int maxSum ...

  3. Maven经验分享(三)编译引入本地jar

    如果编译时需要引入本地jar,则可以增加如下配置: <plugin> <artifactId>maven-compiler-plugin</artifactId> ...

  4. DMS:直接可微的网络搜索方法,最快仅需单卡10分钟 | ICML 2024

    Differentiable Model Scaling(DMS)以直接.完全可微的方式对宽度和深度进行建模,是一种高效且多功能的模型缩放方法.与先前的NAS方法相比具有三个优点:1)DMS在搜索方面 ...

  5. centos7.5离线安装zabbix4.0

    一.配置环境 1.1 Linux环境说明 zabbix 安装要求 https://www.zabbix.com/documentation/4.0/zh/manual/installation/req ...

  6. Vue elementui 进度条随机颜色

    项目要求显示进度条,而且进度条的颜色不能重复,所以就有了随机进度条的想法. 实现的最终效果: <el-table-column header-align="center" a ...

  7. Blender 2D动画

    前情提要: 本来之前会的,很久没有弄,居然忘了,忘得透透的,没得办法,先简单记录一下 前提: 安装有Blender软件 步骤: 1. 打开Blender 2.点击文件,新建,2D Animation ...

  8. vue+xlsx实现表格的导入导出

    前言 前端在开发过程中若是管理系统之类的业务系统,则大多都会涉及到表格的处理,其中最为常见的就是表格的导入导出.有很多办法都可以实现,其中最简单的还是使用插件xlsx. 实现目标 1.对表格数据进行增 ...

  9. 【YashanDB数据库】VMware虚拟机使用默认安装,在掉电之后数据库无法启动

    问题现象 客户使用VMware虚拟机使用默认安装,部署YashanDB个人版,在掉电之后无法启动 操作系统: Virtualization: VMware Operating System: Cent ...

  10. 一个开源、跨平台的.NET UI框架 - Avalonia UI

    前言 今天大姚给大家分享一个开源.免费(MIT License).跨平台的.NET UI框架:Avalonia UI. Avalonia是一个成熟稳定的平台,用于构建桌面.嵌入式.移动的和Web应用程 ...