package main
import (
"bufio"
"fmt"
"io/ioutil"
"os"
)
func writeDemo1(filename string) {
// 指定模式打开文件 追加 文件不存在则创建
file, err := os.OpenFile(filename, os.O_APPEND|os.O_CREATE, os.ModePerm)
// 打开异常检测
if err != nil {
fmt.Printf("open file failed, err: %v\n", err)
return
}
// 延后关闭文件
defer func(file *os.File) {
err := file.Close()
if err != nil {
fmt.Printf("close file failed, err: %v\n", err)
return
}
}(file)
// 方式一 以二进制形式 写入数据到文件
n, err := file.Write([]byte("今天天气还不错。\n"))
if err != nil {
return
}
fmt.Printf("写入了 %d 个字节\n", n)
// 方式二 以字符串形式 写入数据
n, err = file.WriteString("可以愉快的玩耍了。\n")
if err != nil {
return
}
fmt.Printf("写入了 %d 个字节\n", n)
}
func writeDemo2(filename string) {
// 打开文件
file, err := os.OpenFile(filename, os.O_CREATE|os.O_APPEND, os.ModeAppend)
if err != nil {
fmt.Printf("open file failed, err: %v\n", err)
return
}
// 关闭文件
defer func(file *os.File) {
err := file.Close()
if err != nil {
fmt.Printf("close file failed, err: %v\n", err)
return
}
}(file)
// 创建写的对象 使用 bufio.NewWrite 写入数据
wr := bufio.NewWriter(file)
// 以字节形式 写入数据
_, err2 := wr.Write([]byte("昨天天气不错,我们去公园玩去了。\n"))
if err2 != nil {
fmt.Printf("写入数据失败, err: %v\n", err2)
return
}
// 以字符形式写入数据
_, err2 = wr.WriteString("昨天玩的很开心。\n")
if err2 != nil {
fmt.Printf("写入数据失败, err: %v\n", err2)
return
}
}
func writeDemo3(filename string) {
// 使用 `ioutil` 写入数据到文件中
// 底层封装了 使用了 os.WriteFile 会覆盖写入数据
str := "使用outil.WriteFile方法写文件"
err := ioutil.WriteFile(filename, []byte(str), os.ModeAppend)
if err != nil {
fmt.Printf("写入数据失败,err: %v\n", err)
}
}
func main() {
filename := "day05/text.txt"
// 使用 os.OpenFile() 写入数据
writeDemo1(filename)
// 自定义方法二
writeDemo2(filename)
// 使用方式三
writeDemo3(filename)
}