使用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
分类:
Java.文本文件操作
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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与钟表】儿童房表盘