Golang读取文件

2020-04-11  本文已影响0人  懒人程序猿

golang读取文件操作


import (
    "bytes"
    "io"
    "io/ioutil"
    "log"
    "os"
)

// ReadFile
// ioutil.ReadFile(filename string) 调用了ioutil.readAll()
// ioutil.readAll()对os.Open os.Close 封装实现
func ReadFile(filename string) (s string, err error) {
    f, err := ioutil.ReadFile(filename)
    if err != nil {
        log.Println(err.Error())
    }
    s = string(f)
    return
}

// ReadAll
// 和ReadFile一样,同样是调用了ioutil.readAll()
func ReadAll(filename string) (s string, err error) {
    f, err := os.Open(filename)
    if err != nil {
        log.Println(err.Error())
    }
    b, err := ioutil.ReadAll(f)
    if err != nil {
        log.Println(err.Error())
    }
    s = string(b)
    return
}

// Read
func Read(filename string) (s string, err error) {
    f, err := os.Open(filename)
    if err != nil {
        log.Println(err.Error())
    }
    defer f.Close()
    var n int64 = bytes.MinRead
    if fi, err := f.Stat(); err == nil {
        if size := fi.Size() + bytes.MinRead; size > n {
            n = size
        }
    }
    var buf bytes.Buffer
    defer func() {
        e := recover()
        if e == nil {
            return
        }
        if panicErr, ok := e.(error); ok && panicErr == bytes.ErrTooLarge {
            err = panicErr
        } else {
            panic(e)
        }
    }()
    if int64(int(n)) == n {
        buf.Grow(int(n))
    }
    _, err = buf.ReadFrom(f)
    s = string(buf.Bytes())
    return
}

// OpenRead
func OpenRead(filename string) (s string, err error) {
    f, err := os.Open(filename)
    if err != nil {
        log.Println(err.Error())
    }
    defer f.Close()
    buf := make([]byte, 1024)
    _, err = f.Read(buf)
    if err != nil && err != io.EOF {
        panic(err)
    }
    s = string(buf)
    return
}
上一篇下一篇

猜你喜欢

热点阅读