Go 读取文件,块读取 Read(),行读取 ReadBytes('\n')

/ go / 没有评论 / 2098浏览

Go 读取文件,块读取 Read(),行读取 ReadBytes('\n')

demo.go(读取文件,块读取 Read())

package main

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

func main() {
    // 打开文件
    fp, err := os.Open("./demo.txt")  // os.Open() 只读方式打开
    if err != nil {
        fmt.Println("打开文件失败。", err)
        return
    }
    defer fp.Close()

    buf := make([]byte, 1024)
    // 读取文件 (块读取)
    //count, _ := fp.Read(buf)  // count表示读取出来的有效字符(byte)数
    //fmt.Println(string(buf[:count]))
    for {
        // 循环读取文件
        n, err2 := fp.Read(buf)
        if err2 == io.EOF {  // io.EOF表示文件末尾
            fmt.Println("文件读取结束")
            break
        }
        fmt.Print(string(buf[:n]))
    }
}

demo.go(读取文件,行读取 ReadBytes('\n')):

package main
 
import (
	"bufio"
	"fmt"
	"io"
	"os"
)
 
func main() {
	// 打开文件
	fp, err := os.OpenFile("./demo.txt", os.O_RDONLY, 6)
	if err != nil {
		fmt.Println("打开文件失败。", err)
		return
	}
	defer fp.Close()
 
	// 创建文件的缓存区
	r := bufio.NewReader(fp)
	for {
		// 读取文件 (行读取) ReadBytes('\n')
		slice, err2 := r.ReadBytes('\n')  // '\n'表示按行读取。 ','表示按英文逗号读取。
		fmt.Print(string(slice))  // 先打印,再判断err2 (如果文件末尾没有'\n',那么需要先打印再判断err2)
		if err2 == io.EOF {  // 如果读取到文件末尾
			break
		}
	}
}