package main
import (
"os"
"io"
"io/ioutil"
"fmt"
"bufio"
)
var filename = "./output1.txt"
var f *os.File
var err1 error
/**
创建文件夹
*/
func mkDir(descname string) error {
return os.Mkdir(descname, os.ModeDir)
}
/**
* 判断文件是否存在 存在返回 true 不存在返回false
*/
func checkFileIsExist(filename string) (bool) {
var exist = true
if _, err := os.Stat(filename); os.IsNotExist(err) {
exist = false
}
return exist
}
/**
第一种方式: 使用 io.WriteString 写入文件
*/
func write_io_WriteString() {
if checkFileIsExist(filename) {
// 如果文件存在,则只打开文件
f, err1 = os.OpenFile(filename, os.O_APPEND | os.O_RDWR, 0666) // os.O_APPEND | os.O_RDWR 既有读写也有append属性
} else {
f, err1 = os.Create(filename)
}
check(err1)
io.WriteString(f, "第一个:\n")
f.Sync()
//f.Close()
}
/**
第二种方式: 使用 ioutil.WriteFile 写入文件
*/
func write_iouit_writeFIle() {
var bt = []byte("第二个:\n")
// 会覆盖掉文件原内容
err2 := ioutil.WriteFile(filename, bt, 0666)
check(err2)
}
/**
第三种方式: 使用 File(Write,WriteString) 写入文件
*/
func write_File() {
var bt = []byte("第三个:\n")
f, err3 := os.OpenFile(filename, os.O_APPEND | os.O_RDWR, 0666) //创建文件
check(err3)
defer f.Close()
c, err3 := f.Write(bt) //写入文件(字节数组)
fmt.Printf(string(c))
check(err3)
f.Sync()
f.Close()
}
/**
第四种方式: 使用 bufio.NewWriter 写入文件
*/
func write_bufio_write() {
w := bufio.NewWriter(f) //创建新的 Writer 对象
n4, err3 := w.WriteString("第四个:\n")
fmt.Printf("写入 %d 个字节n", n4)
w.Flush()
check(err3)
f.Sync()
f.Close()
}
func main() {
//e := mkDir("sff")
//check(e)
write_io_WriteString()
//write_iouit_writeFIle()
write_File()
write_bufio_write()
}
func check(e error) {
if e != nil {
panic(e)
}
}