在 Go 语言中读取文件的最后几行,需要先确定文件的大小,然后从倒数第 N 行开始读取。
具体实现方法如下:
-
使用 os.Stat 函数获取文件信息,并从中获取文件大小。
-
使用 bufio.NewReader 创建一个带缓冲的读取器,并将该读取器与文件关联。
-
通过读取器的 ReadLine 函数从倒数第 N 行开始读取文件,直到读取到第一行为止。
代码示例:
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
file, err := os.Open("test.txt")
if err != nil {
fmt.Println(err)
return
}
defer file.Close()
// 获取文件信息
info, _ := file.Stat()
// 创建带缓冲的读取器
r := bufio.NewReader(file)
// 移动读取器的读取位置,使其从倒数第 N 行开始读取
var n int64 = 10
var line string
for i := int64(0); i < info.Size(); i++ {
_, err := r.Seek(-1*i, 2)
if err != nil {
break
}
b, _, err := r.ReadLine()
if err != nil {
break
}
line = string(b) + "\n" + line
if int64(len(line)) >= n {
break
}
}
fmt.Println(line)
}