zoukankan      html  css  js  c++  java
  • 利用Java输入输出流更改文件中指定的内容

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

    ​ 昨天准备发布一个数学公式的博客wordpress上,但是在Typora中写的数学公式的格式与wordpress中的编辑器所指定的格式不同。本来想着手动改一下算了,但仔细一想这个数学公式博客以后还会更新,所以干脆写一个程序直接转换格式。本来想用python进行转换的但是读取文件时出现了错误,所以想着先用Java处理,以后再试着用python去处理。

    转换的目标

    Typora中的数学格式:

    $$
    	ext{奇函数:}f(x) = -f(-x)
    $$
    

    wordpress中的数学格式:

    ​```mathjax
    	ext{奇函数:}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
    ";//进行头标记的转换
                        bufferedWriter.write(transformLine);//写入到目标文件中
                        System.out.println(transformLine);
                    } else if (line.startsWith("$$")) {//是尾标记
                        bufferedWriter.write("```
    ");//对尾标记进行转换并且写入
                    } else {
                        bufferedWriter.write(line + "
    ");//既不是头标记也不是尾标记,正常写入
                        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);
        }
    }
    
  • 相关阅读:
    【转】 grep 文件报错 “Binary file ... matches”
    JS 将值插入数组中
    Vue 刷新当前页面,并重新加载页面数据
    Vue 获得所选中目标的状态(checked)以及对应目标的数据,并进行相应的操作
    JS --- 如何获取一个对象的类型
    vue-cli项目开发/生产环境代理实现跨域请求+webpack配置开发/生产环境的接口地址
    VUE 处理文本框获焦点高亮
    VUE项目问题之:去掉url中的#/
    关于移动端终极适配解决方案
    VUE.JS 使用axios数据请求时数据绑定时 报错 TypeError: Cannot set property 'xxxx' of undefined 的解决办法
  • 原文地址:https://www.cnblogs.com/JAVA-54188/p/13868425.html
Copyright © 2011-2022 走看看