前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >golang读文件分析1

golang读文件分析1

作者头像
公众号-利志分享
发布2022-04-25 09:02:37
4950
发布2022-04-25 09:02:37
举报
文章被收录于专栏:利志分享

go提供读文件的方法有:ioutil.ReadAll,ioutil.ReadFile,file.Read,bufio.NewReader等方法,我们可以一次性读取,按buf读取,按行读取等。下面我们先介绍一下他们的使用。

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

ioutil.ReadAll实例

代码语言:javascript
复制
package main

import (
  "fmt"
  "io/ioutil"
  "os"
)

func main() {
  //读文件
  file, err := os.Open("E://stat.log.2021-03-10-17")
  if err != nil {
    fmt.Println("读文件失败", err)
    return
  }
  defer file.Close()
  content, err := ioutil.ReadAll(file)
  if err != nil {
    fmt.Println("读内容失败", err)
    return
  }
  fmt.Println(string(content))
}

ioutil.ReadFile实例

代码语言:javascript
复制
package main

import (
  "fmt"
  "io/ioutil"
)

func main() {
  //读文件
  filePath := "E://stat.log.2021-03-10-17"
  content, err := ioutil.ReadFile(filePath)
  if err != nil {
    fmt.Println("读内容失败", err)
    return
  }
  fmt.Println(string(content))
}

2:golang读文件到buf中

file.Read读取方式

代码语言:javascript
复制
package main

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

func main() {
  //读文件
  filePath := "E://stat.log.2021-03-10-17"
  file, err := os.Open(filePath)
  if err != nil {
    fmt.Println(err)
    return
  }
  defer file.Close()
  chunk := []byte{}
  buf := make([]byte, 100)
  for {
    //file读取到buf中
    n, err := file.Read(buf)
    //当n为0 并且到eof说明文件读完了,则退出
    if n == 0 {
      if err == io.EOF {
        break
      }
      if err != nil {
        break
      }
      fmt.Println("err", err)
      return
    }
    fmt.Println("buf:", string(buf[:n]))
    //追加到chunk中去
    chunk = append(chunk, buf[:n]...)
  }
  fmt.Println("end:", len(string(chunk)))
}

用bufio读文件到buf中

代码语言:javascript
复制
package main

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

func main() {
  //读文件,先从文件读取到file, 在从file读取到Reader中,从Reader读取到buf, buf最终追加到[]byte
  filePath := "E://stat.log.2021-03-10-17"
  file, err := os.Open(filePath)
  if err != nil {
    fmt.Println(err)
    return
  }
  defer file.Close()
  chunk := []byte{}
  buf := make([]byte, 100)
  //
  r := bufio.NewReader(file)
  for {
    //file读取到buf中
    n, err := r.Read(buf)
    //当n为0 并且到eof说明文件读完了,则退出
    if n == 0 {
      if err == io.EOF {
        break
      }
      if err != nil {
        break
      }
      fmt.Println("err", err)
      return
    }
    fmt.Println("buf:", string(buf[:n]))
    //追加到chunk中去
    chunk = append(chunk, buf[:n]...)
  }
  fmt.Println("end:", len(string(chunk)))
}

3:按行读取数据

用bufio按行读数据

代码语言:javascript
复制
package main

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

func main() {
  //按行读文件,先从文件读取到file, 在从file读取到Reader中,从Reader读取到buf, buf最终追加到[]byte
  filePath := "E://stat.log.2021-03-10-17"
  file, err := os.Open(filePath)
  if err != nil {
    fmt.Println(err)
    return
  }
  defer file.Close()
  //
  r := bufio.NewReader(file)
  for {
    //读一行数据
    line, err := r.ReadString('\n')
    //当n为0 并且到eof说明文件读完了,则退出
    if err == io.EOF {
      break
    }
    fmt.Println("line:", line)
  }
}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-03-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 利志分享 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档