go 语言文件操作:写入文件 | go 技术论坛-江南app体育官方入口

写文件

明确,对文件的操作,都应该先获取到一个文件操作句柄,即使go的官方包可能提供让我们一次性写入的方法,但是其内部实现也都是有一个操作句柄,想要获取到一个文件的操作句柄(普通文件),可以使用os.open/os.create/os.openfile来实现,在以下的一些例子中,笔者采用os.create来获取操作句柄

1 使用os包

在使用os.create获取到文件操作句柄后,其本身就有绑定一些写文件的方法

示例代码

func main() {
    //在当前路径下,创建test.txt文件,若当前路径存在test.txt,则清空其内容
    filehandler, err := os.create("./test.txt")
    if nil != err {
        panic(err)
    }
    defer filehandler.close()
    //使用write
    _, err = filehandler.write([]byte("hello world\n"))
    checkerr(err)
    //使用writestring
    _, err = filehandler.writestring("this is to test file writing\n")
    checkerr(err)
    //还有一些其他的写操作函数,可以查看官方文档
    fmt.println("执行成功,请检查文件内容是否写入正确")
}
func checkerr(err error) {
    if nil != err {
        panic(err)
    }
}

运行结果

ps d:\gopractice> go run .\filewrite\main.go
执行成功,请检查文件内容是否写入正确
#以下是test.txt文件的内容
hello world
this is to test file writing

2 使用os加fmt的方式,实现格式化写入文件

先用os.create获取到操作句柄,然后用fmt.fprintln格式化写入文件

示例代码

func main() {
    fmtwritefiledemo("./filewrite/test.txt")
    fmt.println("请检查文件内容是否写入正确")
}
func checkerr(err error) {
    if nil != err {
        panic(err)
    }
}
func fmtwritefiledemo(p string) {
    //在当前路径下,创建test.txt文件,若当前路径存在test.txt,则清空其内容
    filehandler, err := os.create(p)
    checkerr(err)
    defer filehandler.close()
    fmt.fprintln(filehandler, "hello world")
    fmt.fprintln(filehandler, 1, 2, 3, 4, 5, 6)
    fmt.fprintln(filehandler, "测试格式化写入文件")
}

运行结果

ps d:\gopractice> go run .\filewrite\main.go
请检查文件内容是否写入正确
#以下是test.txt的内容
hello world
1 2 3 4 5 6
测试格式化写入文件

3 使用bufio包

使用bufio包创建一个writerbuffer来做写文件操作,这里有一点需要注意的是,在执行完write操作之后,应该要调用flush,将内容全部打到文件中去

示例代码

func main() {
    // fmtwritefiledemo("./filewrite/test.txt")
    bufiowritefiledemo("./filewrite/test.txt")
    fmt.println("请检查文件内容是否写入正确")
}
func checkerr(err error) {
    if nil != err {
        panic(err)
    }
}
func bufiowritefiledemo(p string) {
    //在当前路径下,创建test.txt文件,若当前路径存在test.txt,则清空其内容
    filehandler, err := os.create(p)
    checkerr(err)
    defer filehandler.close()
    filewriter := bufio.newwriter(filehandler)
    filewriter.writestring("hello world\n")
    filewriter.writestring("这是使用bufio来测试写入文件\n")
    filewriter.write([]byte("the end....\n"))
    //没有这一句,则文件不会有内容
    err = filewriter.flush()
    checkerr(err)
}

运行结果

ps d:\gopractice> go run .\filewrite\main.go
请检查文件内容是否写入正确
#以下是文件内容
hello world
这是使用bufio来测试写入文件
the end....

4 使用ioutil包

和读文件类似,如果想要写入的数据大小没那么大,我们可以采用ioutil.writefile的操作来写文件

示例代码

func main() {
    filecontent := `
        hello world!
        这是使用ioutil包来写入文件的操作
        the end...
    `
    checkerr(ioutil.writefile("./filewrite/test.txt", []byte(filecontent), os.modeperm))
    fmt.println("请检查文件内容是否写入正确")
}
func checkerr(err error) {
    if nil != err {
        panic(err)
    }
}

运行结果

ps d:\gopractice> go run .\filewrite\main.go
请检查文件内容是否写入正确
# 以下是文件内容
        hello world!
        这是使用ioutil包来写入文件的操作
        the end...

结尾

可能还有一些可以执行写文件操作的一些方式,笔者最常用的是os包和bufio包,ioutil有时也会用,有兴趣的小伙伴可以继续补充

参考:

本文为 wiki 文章,邀您参与纠错、纰漏和优化
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
网站地图