利用Java输入输出流更改文件中指定的内容

利用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);
    }
}
posted @ 2020-10-24 12:33  秃了就变强了  阅读(591)  评论(0编辑  收藏  举报