使用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

 

posted @   逆火狂飙  阅读(958)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
历史上的今天:
2014-02-21 Win下执行Swing程序的BAT文件 和 Linux下执行Swing程序的SH文件
2014-02-21 【Canvas与钟表】儿童房表盘
生当作人杰 死亦为鬼雄 至今思项羽 不肯过江东
点击右上角即可分享
微信分享提示