美文网首页
Golang读取文件

Golang读取文件

作者: 懒人程序猿 | 来源:发表于2020-04-11 12:38 被阅读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
    }
    

    相关文章

      网友评论

          本文标题:Golang读取文件

          本文链接:https://www.haomeiwen.com/subject/awhymhtx.html