读取文件的内容并显示在终端(带缓冲区的方式),使用 os.Open, file.Close, bufio.NewReader(),reader.ReadString 函数和方法。
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("文件读取结束...") }
123
2354
534
文件读取结束...
读取文件的内容并显示在终端(使用 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\n", content) // []byte fmt.Printf("%v", string(content)) // 转为string // 我们没有显式的 Open 文件,因此也不需要显式的 Close 文件。因为,文件的 Open 和 Close 被封装到 ReadFile 函数内部。 }
[49 50 51 13 10 50 51 53 52 13 10 53 51 52 13 10]
123
2354
534