Go文件操作(下)写

前言

上次内容,我们讲解了,Go文件操作的读文件内容的三种方法
今天我们学习在如何将内容写入文件

完整示例代码

package main

import (
    "bufio"
    "fmt"
    "io/ioutil"
    "os"
)

// 写文件的三种方法

//方法一.

func wf1() {
    fp := "./1文件写入.txt" // 文件路径
    // 当我们想要写入一个文件的时候,会有三种情况:
    /*
        1. 如果文件不存在,先创建再写入
        2. 如果文件存在, 追加写入
        3. 如果文件存在,清空重写
    */
    f, err := os.OpenFile(fp, os.O_WRONLY|os.O_CREATE|os.O_APPEND, 0666)
    //os.O_CREATE|os.O_APPEND 表示如果文件不存在,就创建文件,如果文件存在,则追加写入
    if err != nil {
        fmt.Printf("文件打开失败,err:%v", err)
        return
    }
    defer f.Close() //延迟关闭文件
    content := "我写了点什么"
    f.Write([]byte(content))

}

func wf1_2() {
    fp := "./1_2文件写入.txt" // 文件路径
    // 当我们想要写入一个文件的时候,会有三种情况:
    /*
        1. 如果文件不存在,先创建再写入
        2. 如果文件存在, 追加写入
        3. 如果文件存在,清空重写
    */
    f, err := os.OpenFile(fp, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0666)
    //os.O_CREATE|os.O_APPEND 表示如果文件不存在,就创建文件,如果文件存在,则追加写入
    if err != nil {
        fmt.Printf("文件打开失败,err:%v", err)
        return
    }
    defer f.Close() //延迟关闭文件
    content := "我改写了点什么?"
    f.Write([]byte(content))

}

func wf1_3() {
    fp := "./1_3文件写入.txt" // 文件路径
    // 当我们想要写入一个文件的时候,会有三种情况:
    /*
        1. 如果文件不存在,先创建再写入
        2. 如果文件存在, 追加写入
        3. 如果文件存在,清空重写
    */
    //直接创建新文件. 如果文件已经存在,会直接重建,效果相当于os.O_CREATE|os.O_TRUNC
    f, err := os.Create(fp)
    //os.O_CREATE|os.O_APPEND 表示如果文件不存在,就创建文件,如果文件存在,则追加写入
    if err != nil {
        fmt.Printf("文件打开失败,err:%v", err)
        return
    }
    defer f.Close() //延迟关闭文件
    content := "我直接新建的文件"
    f.Write([]byte(content))

}

// 方法二:
func wf2() {
    fp := "./bufio文件写入.text"
    f, err := os.OpenFile(fp, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0666)
    if err != nil {
        fmt.Printf("文件打开出错, err:%v", err)
        return
    }
    defer f.Close()
    bw := bufio.NewWriter(f)
    bw.Write([]byte("第一种内容方式\n"))
    bw.WriteString("第二种内容方式")
    bw.Flush() // 一定要注意加上这一句,用来将缓存中的内容写入文件
}

// 方法三:
func wf3() {
    //如果文件已经存在,会清空内容重写文件
    content := "ioutil方法写入文件"
    err := ioutil.WriteFile("./ioutil文件.txt", []byte(content), 0666)  // 直接调用ioutil的WriteFile()方法写入内容.
    if err != nil {
        fmt.Printf("文件打开出错, err:%v", err)
        return
    }

}

func main() {
    wf1()
    wf1_2()
    wf1_3()
    wf2()
    wf3()

}

代码说明

  1. 方法一中,写了个三个函数.一般我们按第一/二个函数的方法来写即可,第三种方法的本质是第二种方法.
  2. 当我们用OpenFile()函数打开文件获得文件操作句柄的时候,要注意两点:
  • 文件的关闭操作
  • 如果是Linux系统下,第三个参数将申请系统的文件操作权限 .一般我们写0666即可.第三个参数win系统不起作用,可以随便写
  1. 方法二,在将内容写入缓存后,一定要用Flush()方法将缓存内容写入文件.否则无效.
  2. 方法三的第三个参数与方法一中的参数要求相同,方法三的写入方法同方法一中的第二个函数,即清空写入(覆盖写入).如果是追加写入,请注意

后记:

代码后面的注释基本已经比较完整.
写文件的操作也是我们的基本的操作.方法比较多,可以选择一种来习惯.其他的方法略知即可.