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

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:游动-白 设计师:我叫白小胖 返回首页
评论

打赏作者

日月龙腾

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值