前言
上次内容,我们讲解了,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()
}
代码说明
- 方法一中,写了个三个函数.一般我们按第一/二个函数的方法来写即可,第三种方法的本质是第二种方法.
- 当我们用OpenFile()函数打开文件获得文件操作句柄的时候,要注意两点:
- 文件的关闭操作
- 如果是Linux系统下,第三个参数将申请系统的文件操作权限 .一般我们写0666即可.第三个参数win系统不起作用,可以随便写
- 方法二,在将内容写入缓存后,一定要用Flush()方法将缓存内容写入文件.否则无效.
- 方法三的第三个参数与方法一中的参数要求相同,方法三的写入方法同方法一中的第二个函数,即清空写入(覆盖写入).如果是追加写入,请注意
后记:
代码后面的注释基本已经比较完整.
写文件的操作也是我们的基本的操作.方法比较多,可以选择一种来习惯.其他的方法略知即可.