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有时也会用,有兴趣的小伙伴可以继续补充
参考: