利用Java输入输出流更改文件中指定的内容
昨天准备发布一个数学公式的博客到wordpress上,但是在Typora中写的数学公式的格式与wordpress中的编辑器所指定的格式不同。本来想着手动改一下算了,但仔细一想这个数学公式博客以后还会更新,所以干脆写一个程序直接转换格式。本来想用python进行转换的但是读取文件时出现了错误,所以想着先用Java处理,以后再试着用python去处理。
转换的目标
Typora中的数学格式:
$$
\text{奇函数:}f(x) = -f(-x)
$$
wordpress中的数学格式:
```mathjax
\text{奇函数:}f(x) = -f(-x)
```
实现思路:
这两者之间主要是头标记和尾标记需要进行处理,中间部分都还是使用Latex进行书写的。因此我们的目标是只需要将头标记$$转换为```mathjax,尾标记$$转化为```就可以了。
接着想怎么用编程实现
先要将文件读入到程序中,在这里由于文件内容都是字符所以我使用Reader类去处理会比用InputStream类方便一些
然后我想让程序一行一行的去读入,可以不用去使用字符串的截断操作,因此我会使用BufferedReader类中的readLine()方法去一行一行的读入
接着我们只要让程序在第一次读入$$时转换为```mathjax,第二次读入时将$$转化为```,然后写入到另一个文件中去,这就大功告成了。
代码实现:
import java.io.*;
/**
* @Author HeHao
* @Date 2020/10/21 17:10
* @Version 1.0
*/
public class Transform {
/**
*
* @param sourcePath 读取文件的路径
* @param destinationPath 写入文件的路径
*/
static void readFile(String sourcePath, String destinationPath) {
try {
var bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(sourcePath)));
var bufferedWriter = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(destinationPath)));
var line = ""; //每一次读入一行的内容
var first$$ = false;//是不是头标记$$
while ((line = bufferedReader.readLine()) != null) {//如果没有读到文件末尾就一直读取
if (line.startsWith("$$"))
first$$ = !first$$;
if (first$$ && line.startsWith("$$")) {//是头标记$$
var transformLine = "```mathjax\n";//进行头标记的转换
bufferedWriter.write(transformLine);//写入到目标文件中
System.out.println(transformLine);
} else if (line.startsWith("$$")) {//是尾标记
bufferedWriter.write("```\n");//对尾标记进行转换并且写入
} else {
bufferedWriter.write(line + "\n");//既不是头标记也不是尾标记,正常写入
System.out.println(line);
}
}
bufferedReader.close();//关闭读写资源
bufferedWriter.flush();
bufferedWriter.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
var sourcePath = "C:\\Users\\10365\\Desktop\\math\\公式.md";
var destinationPath = "C:\\Users\\10365\\Desktop\\math\\公式2.md";
readFile(sourcePath, destinationPath);
}
}