zoukankan      html  css  js  c++  java
  • 使用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

  • 相关阅读:
    HandlerMethodArgumentResolver[1]-Controller入参封装
    SpringMVC拦截器
    处理器映射器HandlerMapping
    SpringBoot启动流程
    SpringBoot自动配置原理
    DeferredImportSelector的处理
    Spring的SPI机制【spring.factories】
    Spring 5.3.x源码构建
    分析jvm的cpu,内存,回收问题
    F.A.Q常见问题处理
  • 原文地址:https://www.cnblogs.com/heyang78/p/12340095.html
Copyright © 2011-2022 走看看