美文网首页
Go核心编程-文件操作 [IO]

Go核心编程-文件操作 [IO]

作者: 大鱼人Echo | 来源:发表于2019-05-06 21:08 被阅读0次

    文件概念

    文件我们都不陌生,文件就是保存数据的地方,比如大家机场使用的word文档,txt文件,excel文件都是文件
    文件最主要的作用就是保存数据,它既可以保存一张图片,也可以保存视频,声音

    输入流和输出流

    文件在程序中是以流的形式来操作的

    流:数据在数据源(文件)和程序(内存)之间经历的路径
    输入流:数据从数据源(文件)到程序(内存)的路径
    输出流:数据从程序(内存)到数据源(文件的)路径

    os.File封装所有文件相关操作,File是一个结构体

    // os包里的Open函数
    func Open(name string) (*File, error) {
        return OpenFile(name, O_RDONLY, 0)
    }
    
    // os 包里Close方法
    func (f *File) Close() error {
        if f == nil {
            return ErrInvalid
        }
        return f.file.close()
    }
    

    读取文件实例

    案例1. 读取文件的内容并显示在终端(带缓冲区的方式),使用 os.Open, file.Close, bufio.NewReader(), reader.ReadString 函数和方法

    package main
    
    import (
        "bufio"
        "fmt"
        "io"
        "os"
    )
    
    func main() {
        // 1. 打开文件
        file, err := os.Open("./test02.txt")
        if err != nil {
            fmt.Println("open file err=", err)
            return
        }
        // 2. 当函数退出时,要及时的关闭file
        defer file.Close() // 要及时关闭file句柄,否则会有内存泄漏
    
        // 创建一个*Reader, 是带缓冲的
        reader := bufio.NewReader(file)
    
        // 循环读取文件的内容
        for {
            str, err := reader.ReadString('\n') // 读到一个换行就打印到控制台
            if err == io.EOF {                  // io.EOF表示文件的末尾
                break
            }
            fmt.Print(str)
        }
    
        fmt.Println("文件读取结束...")
    }
    
    

    案例2. 读取文件的内容并显示在终端(使用 ioutil 一次将整个文件读入到内存中),这种方式适用于文件 不大的情况。相关方法和函数(ioutil.ReadFile)

    package main
    
    import (
        "fmt"
        "io/ioutil"
    )
    
    func main() {
        filePath := "./test03.txt"
        // 1. 使用ioutil.ReadFile一次性将文件读取到位
        content, err := ioutil.ReadFile(filePath)
        if err != nil {
            fmt.Printf("read file err=%v", err)
        }
    
        // 2. 把读取的内容显示到终端
        fmt.Printf("%v", string(content)) // 由于读取到的是[]byte 需要用string转换一下
    
        // 3. 我们没有显式的Open文件, 因此也不需要显式的Close文件
        // 因为文件的Open和Close被封装在了ReadFile函数内部
    }
    

    相关文章

      网友评论

          本文标题:Go核心编程-文件操作 [IO]

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