Go 带缓冲的Reader读文件、一次性读取文件

    技术2026-02-07  3

    带缓冲的Reader读文件

    读取文件的内容并显示在终端(带缓冲区的方式),使用 os.Open, file.Close, bufio.NewReader(),reader.ReadString 函数和方法案例演示:

    package main import ( "fmt" "os" "bufio" "io" ) func main() { file , err := os.Open("d:/test.txt") if err != nil { fmt.Println("open file err=", err) } //当函数退出时,要及时的关闭file defer file.Close() //要及时关闭file句柄,否则会有内存泄漏. // 创建一个 *Reader ,是带缓冲的 /* const ( defaultBufSize = 4096 //默认的缓冲区为4096 ) */ reader := bufio.NewReader(file) //循环的读取文件的内容 for { str, err := reader.ReadString('\n') // 读到一个换行就结束 if err == io.EOF { // io.EOF表示文件的末尾 break } //输出内容 fmt.Printf(str) } fmt.Println("文件读取结束...") } 输出结果:

    一次性读取文件

    读取文件的内容并显示在终端(使用 ioutil 一次将整个文件读入到内存中),这种方式适用于文件不大的情况。

    相关方法和函数(ioutil.ReadFile)

    演示案例 package main import ( "fmt" "io/ioutil" ) func main() { //使用ioutil.ReadFile一次性将文件读取到位 file := "d:/test.txt" content, err := ioutil.ReadFile(file) if err != nil { fmt.Printf("read file err=%v", err) } //把读取到的内容显示到终端 //fmt.Printf("%v", content) // []byte fmt.Printf("%v", string(content)) // []byte //我们没有显式的Open文件,因此也不需要显式的Close文件 //因为,文件的Open和Close被封装到 ReadFile 函数内部 } 输出显示:

    Processed: 0.031, SQL: 11