1. 使用 ioutil.ReadFile
一次性读取整个文件到内存
package main
import (
"io/ioutil"
"log"
)
func main() {
// 适用于读取小文件
content, err := ioutil.ReadFile("example.txt")
if err != nil {
log.Fatal(err)
}
println(string(content))
}
2、使用 os.Open
和 bufio
逐行读取或分块读取
file, err := os.Open("example.txt")
if err != nil {
log.Fatal(err)
}
defer file.Close()
// 创建一个 Scanner 来读取文件内容
scanner := bufio.NewScanner(file)
// 创建一个变量来保存文件内容
var content string
for scanner.Scan() {
//fmt.Println(scanner.Text())
// 追加每一行内容到变量中
content += scanner.Text() + "\n"
}
if err := scanner.Err(); err != nil {
log.Fatal(err)
}
// 打印整个文件的内容
fmt.Println(content)
3、使用 os.Open
和 io.Reader
自定义读取逻辑
file, err := os.Open("example.txt")
if err != nil {
log.Fatal(err)
}
defer file.Close() // 延迟关闭文件,确保在函数返回时关闭文件
// 创建一个缓冲区以存储文件内容
var contentBuffer bytes.Buffer
// 定义一个分块大小的缓冲区
buffer := make([]byte, 1024)
// 循环读取文件内容直到文件结束
for {
// 从文件读取内容到缓冲区
n, err := file.Read(buffer)
if err != nil && err != io.EOF {
log.Fatal(err)
}
if n == 0 {
break
}
// 将读取的内容写入到缓冲区
contentBuffer.Write(buffer[:n])
}
// 将缓冲区的内容转换为字符串
content := contentBuffer.String()
// 打印文件内容
fmt.Println(content)