go读文件操作实战

一 实战1

1 需求

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

2 代码

package main

import (
   "bufio"
   "fmt"
   "io"
   "os"
)

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

3 测试

123

2354

534

文件读取结束...

二 实战2

1 需求

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

2 代码

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\n", content) // []byte
   fmt.Printf("%v", string(content)) // 转为string
   // 我们没有显式的 Open 文件,因此也不需要显式的 Close 文件。因为,文件的 Open 和 Close 被封装到 ReadFile 函数内部。
}

3 测试

[49 50 51 13 10 50 51 53 52 13 10 53 51 52 13 10]

123

2354

534

 

上一篇:Go语言fmt、os、io\ioutil、bufio包


下一篇:HTTP请求