java文件替换一行数据_用Golang替换文件中的一行

我是Golang的新手,从一些例子开始 . 目前,我要做的是逐行读取文件,并在满足特定条件时将其替换为另一个字符串 . 该文件用于测试目的包含四行:

one

two

three

four

处理该文件的代码如下所示:

func main() {

file, err := os.OpenFile("test.txt", os.O_RDWR, 0666)

if err != nil {

panic(err)

}

reader := bufio.NewReader(file)

for {

fmt.Print("Try to read ...\n")

pos,_ := file.Seek(0, 1)

log.Printf("Position in file is: %d", pos)

bytes, _, _ := reader.ReadLine()

if (len(bytes) == 0) {

break

}

lineString := string(bytes)

if(lineString == "two") {

file.Seek(int64(-(len(lineString))), 1)

file.WriteString("This is a test.")

}

fmt.Printf(lineString + "\n")

}

file.Close()

}

正如您在代码片段中看到的,我想在从文件中读取此字符串后立即将字符串"two"替换为"This is a test" . 为了获得文件中的当前位置,我使用Go的Seek方法 . 然而,发生的是总是最后一行被替换为这是一个测试,使文件看起来像这样:

one

two

three

This is a test

检查将当前文件位置写入终端的print语句的输出,我在 the first line has been read 之后得到那种输出:

2016/12/28 21:10:31 Try to read ...

2016/12/28 21:10:31 Position in file is: 19

所以在第一次读取之后,位置光标已经指向我文件的末尾,这解释了为什么新字符串被附加到结尾 . 有谁知道这里发生了什么,或者更确切地说是什么导致了这种行为?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值