Go语言操作文本文件(附带实例)
Go 语言的 os 包用于执行文本文件的写入、追加、读取操作。
在 os 包中,包含 OpenFile() 函数,其语法格式如下:
下面列举几个在程序开发过程中常用的文件处理参数(flag),如下表所示:
熟悉表中的几个常用的文件处理参数,接下来通过几个实例演示文件处理参数的使用方法。
【实例 1】向新建文件写入古诗诗句。在当前程序所在的目录下,创建 poetry.txt 文件。使用带缓存的 Writer,向其中写入如下的诗句:青海长云暗雪山,孤城遥望玉门关。黄沙百战穿金甲,不破楼兰终不还。代码如下:

图 1 创建的poetry.txt文件
并且缓存的诗句也被写入其中(见下图):

图 2 poetry.txt中的内容
【实例 2】向已经存在的 poetry.txt 中追加古诗的诗名和作者。代码如下:

图 3 追加古诗的诗名和作者到poetry.txt中
【实例 3】把 poetry.txt 中的内容打印在控制台上。
在 os 包中,包含 OpenFile() 函数,其语法格式如下:
func OpenFile(name string, flag int, perm FileMode) (file *File, err error)参数说明如下:
- name:文件的文件名;
- flag:文件的处理参数,数据类型为 int 类型。
下面列举几个在程序开发过程中常用的文件处理参数(flag),如下表所示:
文件处理参数的值 | 说明 |
---|---|
O_RDONLY | 使用只读模式打开文件 |
O_WRONLY | 使用只写模式打开文件 |
O_RDWR | 使用读写模式打开文件 |
O_APPEND | 在对文件执行写操作时,把数据追加到文件的尾部 |
O_CREATE | 如果文件不存在,则创建新文件 |
O_EXCL | 和 O_CREATE 配合使用,文件必须不存在,否则返回错误 |
O_SYNC | 当执行一系列写操作时,每次都要等待上次的 I/O 操作完成后再执行 |
O_TRUNC | 在打开文件时清空文件 |
熟悉表中的几个常用的文件处理参数,接下来通过几个实例演示文件处理参数的使用方法。
【实例 1】向新建文件写入古诗诗句。在当前程序所在的目录下,创建 poetry.txt 文件。使用带缓存的 Writer,向其中写入如下的诗句:青海长云暗雪山,孤城遥望玉门关。黄沙百战穿金甲,不破楼兰终不还。代码如下:
package main import ( "bufio" "fmt" "os" ) func main() { //打开文件 //0666 表示当前文件没有特殊权限,任何用户都可以对其执行写入、读取操作 file, err := os.OpenFile("poetry.txt", os.O_WRONLY|os.O_CREATE, 0666) if err != nil { fmt.Println("打开文件失败", err) } //关闭文件 defer file.Close() //使用带缓存的 Writer write := bufio.NewWriter(file) write.WriteString("青海长云暗雪山,") write.WriteString("孤城遥望玉门关。") write.WriteString("黄沙百战穿金甲,") write.WriteString("不破楼兰终不还。") //将缓存的数据写入文件 write.Flush() fmt.Println("诗句已写入文件,请查看!") //打印提示信息 }运行程序后,当控制台打印“诗句已写入文件,请查看!”时,说明在当前程序所在的目录下,已经创建 poetry.txt 文件(见下图):

图 1 创建的poetry.txt文件
并且缓存的诗句也被写入其中(见下图):

图 2 poetry.txt中的内容
【实例 2】向已经存在的 poetry.txt 中追加古诗的诗名和作者。代码如下:
package main import ( "bufio" "fmt" "os" ) func main() { //打开文件 file, err := os.OpenFile("poetry.txt", os.O_WRONLY|os.O_APPEND, 0666) if err != nil { fmt.Println("打开文件失败", err) } //关闭文件 defer file.Close() //使用带缓存的 Writer write := bufio.NewWriter(file) write.WriteString("\n《从军行七首·其四》\n") write.WriteString("王昌龄\r\n") //将缓存的数据写入文件 write.Flush() fmt.Println("古诗的诗名和作者已追加到 poetry.txt 中,请查看!") //打印提示信息 }运行程序后,当控制台打印“古诗的诗名和作者已追加到 poetry.txt 中,请查看!”时,说明古诗的诗名和作者已经追加到 poetry.txt 中,如下图所示:

图 3 追加古诗的诗名和作者到poetry.txt中
【实例 3】把 poetry.txt 中的内容打印在控制台上。
package main import ( "bufio" "fmt" "io" "os" ) func main() { // 打开文件 file, err := os.OpenFile("poetry.txt", os.O_RDWR|os.O_APPEND, 0666) if err != nil { fmt.Println("打开文件失败", err) return } // 及时关闭文件 defer file.Close() // 读取 poetry.txt 中的数据 reader := bufio.NewReader(file) for { str, err := reader.ReadString('\n') // 原图写成了 'In',已修正 if err == io.EOF { break } fmt.Print(str) // 打印已经读取的数据 } }运行结果如下:
青海长云暗雪山,孤城遥望玉门关。黄沙百战穿金甲,不破楼兰终不还。
《从军行七首·其四》
王昌龄