Go 语言文件操作:写入文件
写文件
明确,对文件的操作,都应该先获取到一个文件操作句柄,即使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有时也会用,有兴趣的小伙伴可以继续补充
推荐文章: