• 使用java.io.RandomAccessFile更改文本文件的内容


    原文本内容:

    2020-01-21 08:31:08.520 [main] INFO  logbackCfg.App -秦时明月汉时关
    2020-01-21 08:31:08.521 [main] ERROR logbackCfg.App -万里长征人未还
    2020-01-21 08:31:08.521 [main] DEBUG logbackCfg.App -但使龙城飞将在
    2020-01-21 08:31:08.521 [main] TRACE logbackCfg.App -不教胡马度阴山
    2020-01-21 08:31:10.311 [main] INFO  logbackCfg.App2 -九里山前作战场
    2020-01-21 08:31:10.317 [main] ERROR logbackCfg.App2 -牧童拾得旧刀枪
    2020-01-21 08:31:10.317 [main] DEBUG logbackCfg.App2 -微风吹皱乌江水
    2020-01-21 08:31:10.317 [main] TRACE logbackCfg.App2 -恰似虞姬别霸王
    2020-01-21 08:31:13.521 [main] INFO  logbackCfg.App -秦时明月汉时关
    2020-01-21 08:31:13.521 [main] ERROR logbackCfg.App -万里长征人未还
    2020-01-21 08:31:13.521 [main] DEBUG logbackCfg.App -但使龙城飞将在
    2020-01-21 08:31:13.521 [main] TRACE logbackCfg.App -不教胡马度阴山
    2020-01-21 08:31:14.262 [main] INFO  logbackCfg.NewDayThread -万里赴戎机,关山度若飞。
    2020-01-21 08:31:14.267 [main] ERROR logbackCfg.NewDayThread -朔气传金柝,寒光照铁衣。
    2020-01-21 08:31:14.267 [main] DEBUG logbackCfg.NewDayThread -将军百战死,壮士十年归。

    使用如下程序进行替换:

    package randomaccessfile;
    
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.io.RandomAccessFile;
    
    public class RndAccessFile {
        public static void main(String[] args) {
            RandomAccessFile rndFile = null;
            try {
                rndFile = new RandomAccessFile("D:\logs\rndTest.txt", "rw");
                
                String line = null;
                long lastPoint = 0; 
                
                while ((line = rndFile.readLine()) != null) {
                    final long point = rndFile.getFilePointer();
                    
                    // ASCII字符替换
                    if(line.contains("ERROR")){
                        String str=line.replace("ERROR", "error");
                        rndFile.seek(lastPoint);
                        rndFile.writeBytes(str);
                    }
                    
                    // UTF8字符替换
                    String utf8 = new String(line.getBytes("ISO-8859-1"),"UTF-8");
                    if(utf8.contains("秦时明月汉时关")){
                        String str=utf8.replace("秦时明月汉时关", "葡萄美酒夜光杯");// Must be same length
                        rndFile.seek(lastPoint);
                        rndFile.write(str.getBytes("UTF-8"));
                    }
                    
                    lastPoint = point;
                }
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                try {
                    rndFile.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    替换结果:

    2020-01-21 08:31:08.520 [main] INFO  logbackCfg.App -葡萄美酒夜光杯
    2020-01-21 08:31:08.521 [main] error logbackCfg.App -万里长征人未还
    2020-01-21 08:31:08.521 [main] DEBUG logbackCfg.App -但使龙城飞将在
    2020-01-21 08:31:08.521 [main] TRACE logbackCfg.App -不教胡马度阴山
    2020-01-21 08:31:10.311 [main] INFO  logbackCfg.App2 -九里山前作战场
    2020-01-21 08:31:10.317 [main] error logbackCfg.App2 -牧童拾得旧刀枪
    2020-01-21 08:31:10.317 [main] DEBUG logbackCfg.App2 -微风吹皱乌江水
    2020-01-21 08:31:10.317 [main] TRACE logbackCfg.App2 -恰似虞姬别霸王
    2020-01-21 08:31:13.521 [main] INFO  logbackCfg.App -葡萄美酒夜光杯
    2020-01-21 08:31:13.521 [main] error logbackCfg.App -万里长征人未还
    2020-01-21 08:31:13.521 [main] DEBUG logbackCfg.App -但使龙城飞将在
    2020-01-21 08:31:13.521 [main] TRACE logbackCfg.App -不教胡马度阴山
    2020-01-21 08:31:14.262 [main] INFO  logbackCfg.NewDayThread -万里赴戎机,关山度若飞。
    2020-01-21 08:31:14.267 [main] error logbackCfg.NewDayThread -朔气传金柝,寒光照铁衣。
    2020-01-21 08:31:14.267 [main] DEBUG logbackCfg.NewDayThread -将军百战死,壮士十年归。

    参考资料:

    https://www.cnblogs.com/wangjinyu/p/10803596.html

  • 相关阅读:
    【QT】error: 'connect'/'sender' was not declared in this scope
    【QT】添加图片资源并使用QImage加载图片显示
    【QT】去掉.ui窗口的最大化、最小化和关闭按钮
    【Linux】(一)美化Linux终端之oh-my-zsh开源项目(Linux终端主题)
    【git】配置git命令行别名
    浅谈函数防抖与函数节流
    php连接数据库的天龙八部!
    JavaScript画圆
    表格的即时编辑
    用html+css+js模拟下拉菜单
  • 原文地址:https://www.cnblogs.com/heyang78/p/12340095.html
Copyright © 2020-2023  润新知