首页 > 编程笔记 > Go语言笔记 阅读:7

Go语言操作文本文件(附带实例)

Go 语言的 os 包用于执行文本文件的写入、追加、读取操作。

在 os 包中,包含 OpenFile() 函数,其语法格式如下:
func OpenFile(name string, flag int, perm FileMode) (file *File, err error)
参数说明如下:
下面列举几个在程序开发过程中常用的文件处理参数(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) // 打印已经读取的数据
    }
}
运行结果如下:

青海长云暗雪山,孤城遥望玉门关。黄沙百战穿金甲,不破楼兰终不还。
《从军行七首·其四》
王昌龄

相关文章