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

原文本內容:java

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 -將軍百戰死,壯士十年歸。

使用以下程序進行替換:dom

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();
            }
        }
    }
}

替換結果:ide

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 -將軍百戰死,壯士十年歸。
相關文章
相關標籤/搜索