Golang简单文件读取

25 阅读1分钟

1 一次性读取文件的所有内容

1.1 根据文件名直接读取

函数:func ReadFile(name string) ([]byte, error)

示例:

func Test1 (t *testing.T) {
    content, err := os.ReadFile("message.txt")
    if err != nil {
       fmt.Println(err)
    }
    fmt.Println(string(content))
}

1.2 创建句柄后再读取

函数:func (f *File) Read(b []byte) (n int, err error)

示例:

func Test2(t *testing.T) {
    file, err := os.Open(`message.txt`)
    if err != nil {
       fmt.Println(err)
       return
    }
    defer file.Close()

    buff := make([]byte, 1024)

    n, err := file.Read(buff)
    if err != nil {
       fmt.Println(err)
       return
    }
    fmt.Println(string(buff[:n]))
}

2 根据分隔符读取

2.1 使用Reader进行读取,注意此种方法包含分隔符

2.1.1 ReadString方法

函数:func (b *Reader) ReadString(delim byte) (string, error)

示例:

func Test3(t *testing.T)  {
    file, err := os.Open(`message.txt`)
    if err != nil {
       fmt.Println(err)
       return
    }
    defer file.Close()

    reader := bufio.NewReader(file)

    for {
       if s, err := reader.ReadString('\n'); err == nil {
          fmt.Print(s)
       } else if err.Error()  == "EOF" {
          fmt.Print(s)
          break
       } else {
          fmt.Println(err)
          break
       }
    }
}

2.1.2 ReadBytes方法

函数:func (b *Reader) ReadBytes(delim byte) ([]byte, error)

示例:

func Test4(t *testing.T)  {
    file, err := os.Open(`message.txt`)
    if err != nil {
       fmt.Println(err)
       return
    }
    defer file.Close()

    reader := bufio.NewReader(file)

    for {
       if bytes, err := reader.ReadBytes('\n'); err == nil {
          fmt.Print(string(bytes))
       } else if err.Error()  == "EOF" {
          fmt.Print(string(bytes))
          break
       } else {
          fmt.Println(err)
          break
       }
    }
}

2.2 使用Scanner进行读取,注意此种方法不会包含分隔符

函数:func (s *Scanner) Scan() bool

示例:

func Test5(t *testing.T)  {
    file, err := os.Open(`message.txt`)
    if err != nil {
       fmt.Println(err)
       return
    }
    defer file.Close()

    scanner := bufio.NewScanner(file)
    scanner.Split(bufio.ScanWords)

    for scanner.Scan() {
       fmt.Println(scanner.Text())
    }
}