package main import ( "bufio" "fmt" "io/ioutil" "os" "path/filepath" ) // 文件写入 // 以指定模式打开文件 // os.OpenFile(文件名 name, 文件模式/标志位 flag, 文件权限 perm) // flag 文件模式/标志位 // os.O_WRONLY 只写 // os.O_CREATE 创建 // os.O_RDONLY 只读 // os.O_RDWR 读写 // os.O_TRUNC 清空 // os.O_APPEND 追加 // perm 文件权限 // 文件权限 使用 8进制数 表示 类似 linux 下的文件权限 // 读 04 // 写 02 // 执行 01 func main() { fileName := "./test.file" // os.TempDir() 获取 系统 临时目录 absPath, _ := filepath.Abs(filepath.Join(os.TempDir(), fileName)) fmt.Println("打开文件", absPath) f, err := os.OpenFile(absPath, os.O_RDWR|os.O_APPEND|os.O_CREATE, 0644) if err != nil { fmt.Println("文件打开失败", err) } defer func() { _ = f.Close() }() fmt.Println("=========================================================") fmt.Println("ioutil 写入文件") // go 1.16 开始 ioutil.WriteFile 与清空文件 后 直接使用 os.Write 后写入效果相同 _ = ioutil.WriteFile(absPath, []byte("5. ioutil 写入数据\n"), 0644) fmt.Println("=========================================================") fmt.Println("原始方法 写入文件") _, _ = f.Write([]byte("1. 写入测试\n")) _, _ = f.WriteString("2. 写入测试\n") fmt.Println("=========================================================") fmt.Println("bufio 写入文件") writer := bufio.NewWriter(f) // bufio 的 写入 是指 缓冲区 // 调用 Flush 的时候 才 真正 写入文件 _, _ = writer.Write([]byte("3. bufio 写入测试\n")) _, _ = writer.WriteString("4. bufio 写入测试\n") // 真正写入文件 将数据从缓冲区写入文件 _ = writer.Flush() }