Golang是如何读取文件

据需求选择:如果需要一次性读取,用ioutil.ReadFile和ioutil.ReadAll方便;如果需要分块或分行,用bufio的Read、ReadString或者ReadLine更加方便;如果是大文件读写的话,用bufio。

https://www.jb51.net/article/187533.htm

https://www.cnblogs.com/wangqianlove/p/12579994.html

https://www.jianshu.com/p/62ae46556206

一、一次性读取整个文件.ioutil

package main
 
import (
 "io/ioutil"
 "log"
 "fmt"
)
 
func main() {
 bytes, err := ioutil.ReadFile("filetoread.txt")
 if err != nil {
 log.Fatal(err)
 }
 
 fmt.Println("Bytes read: ", len(bytes))
 fmt.Println("String read: ", string(bytes))
}
func read3(filepath string) string {
    file, err := os.Open(filepath)
    if err != nil{  
        panic(err)  
    }
    defer file.Close()
    f, _ := ioutil.ReadAll(file)
    txt := string(f)
    return txt
}

 二、使用bufio分块读取

// bufio
func read2(filepath string) string {
    file, err := os.Open(filepath)
    if err != nil{  
        panic(err)  
    }
    defer file.Close()
    chunks := make([]byte,1024,1024)
    f := bufio.NewReader(file)
    buf := make([]byte,1024)
    for {
        n, err := f.Read(buf)
        if err != nil || 0 == n {
            break
        }
        chunks = append(chunks, buf[:n]...)
    }
    return string(chunks)
}

 三、使用 os.Open分块读取

func read1(filepath string) string {
    f, err := os.Open(filepath)
    if err != nil{  
        panic(err)  
    }
    defer f.Close()
    chunks := make([]byte,1024,1024)
    buf := make([]byte,1024)
    for {
        n, err := f.Read(buf)
        if err != nil || 0 == n {
            break
        }
        chunks = append(chunks, buf[:n]...)
    }
    return string(chunks)
}

四、利用多线程读取大文件

https://blog.csdn.net/dfsgwe1231/article/details/105994233

https://www.jb51.net/article/202425.htm

五、golang实现http表单大文件流式上传服务端代码

golang的http标准库的上传文件是一次性将文件全部读到内存中,这样上传小文件还可以,但是大文件就无能为力了。

userData, err := forms.Parse(c.Request)
 if err != nil {
 log.Printf("parse错误:%v", err)
 return
 }
 header := userData.GetFile("file")
 fileReader, err := userData.GetFileReader("file")
 if err != nil {
 log.Printf("获取reader错误:%v", err)
 return
 }
 file, _ := os.Create(header.Filename)
 io.Copy(file, fileReader)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值