# Golang 文件操作

By [Robin](https://paragraph.com/@robin-8) · 2023-02-24

---

读文件
===

### file.Read 按字节读

    func readFileByRead(fileName string) {
        //打开和关闭文件
        file, err := os.Open(fileName)
        if err != nil {
            fmt.Println("Open file failed! err:", err)
            return
        }
        defer file.Close()
    
        //读取文件
        var content []byte
        var tmp = make([]byte, 128)
        for {
            n, err := file.Read(tmp)
            if err == io.EOF {
                fmt.Println("Read Done!")
                break
            }
            if err != nil {
                fmt.Println("Read file failed, err:", err)
                return
            }
            content = append(content, tmp[:n]...)
        }
        fmt.Println(string(content))
    }
    

### bufio 按行读

    // bufio按行读取示例
    func readFileByBufio(fileName string) {
        //打开和关闭文件
        file, err := os.Open(fileName)
        if err != nil {
            fmt.Println("Open file failed! err:", err)
            return
        }
        defer file.Close()
    
      //读取文件
        reader := bufio.NewReader(file)
        for {
            line, err := reader.ReadString('\n')
            if err == io.EOF {
                if len(line) != 0 {
                    fmt.Println(line)
                }
                fmt.Println("Read Done")
                break
            }
            if err != nil {
                fmt.Println("Read file failed, err:", err)
                return
            }
            fmt.Println(line)
        }
    
    }
    

### ioutil 读所有

    func readFileByIoutil(fileName string) {
        content, err := ioutil.ReadFile(fileName)
        if err != nil {
            fmt.Println("Read file failed,err:", err)
            return
        }
        fmt.Println(string(content))
    }
    

写文件
===

### Write和WriteString

    func writeFileByWrite(content string) {
        // 打开文件
        file, err := os.OpenFile("robin.txt", os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0666)
        if err != nil {
            fmt.Println("Open file failed, err: ", err)
            return
        }
        defer file.Close()
        
        //写入内容
        file.Write([]byte(content)) //通过字节切片写入
        file.WriteString(content)   //通过字符串写入
    }
    

### bufio.NewWriter

    func writeFileByBufio(content string) {
        //打开文件
        file, err := os.OpenFile("robin.txt", os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0666)
        if err != nil {
            fmt.Println("Open file failed, err: ", err)
            return
        }
        defer file.Close()
    
        //写入内容
        writer := bufio.NewWriter(file)
        for i := 0; i < 10; i++ {
            writer.WriteString(content) //将数据先写入缓存
        }
        writer.Flush()
    }
    

### ioutil.WriteFile

    func writeFileByIoutil(content string) {
        for i := 0; i < 10; i++ {
            err := ioutil.WriteFile("robin.txt", []byte(content), 0666)
            if err != nil {
                fmt.Println("write file failed, err:", err)
                return
            }
        }
    }

---

*Originally published on [Robin](https://paragraph.com/@robin-8/golang-2)*
