读文件
在日常开发中我们少不了对文件读取,今天我们就从三部分来讲解:全量读,带缓冲区读,任意位置读。
全量读
我们先来看看一个简单的例子:
package main
import (
"fmt"
"io/ioutil"
)
func main() {
dat, err := ioutil.ReadFile("./main.go")
fmt.Println(err)
fmt.Println(string(dat))
}运行程序可以打印整个 main.go 文件内容,如果我们将 ./main.go 修改为 ./main.go1,程序将出现 no such file or directory 的错误, 所以在文件读取的时候一定要注意检查 err。
带缓冲区读
运行程序会输出 main.go 的前 16 个字节内容,具体为:
任意位置读
有些时候我们想在一个文件特定地方读取特定长度的内容,那我们有什么方法可以使用呢?
第一种: f.Seek + f.Read
运行代码输出结果为:
第二种:使用 f.ReadAt
运行结果同样为:
但注意:
第一种方式是非并发安全的,例如:
输出结果为:
第二种 f.ReadAt 是并发安全的,例如:
输出结果为:
项目实战
实战项目一: 如何使用 buf 实现 ioutil.ReadFile 类似效果:
实战项目二: 使用 bufio 实现行统计:
运行结果为:
最后更新于
这有帮助吗?