作为一种编程语言,Go 具有广泛的内置功能,包括创建、读取和写入文本(.txt)文件等文件的功能。
10年积累的成都做网站、网站建设、外贸营销网站建设经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站策划后付款的网站建设流程,更有鸠江免费网站建设让你可以放心的选择与我们合作。
文件是现代世界我们日常生活的重要组成部分。文本文件对于存储结构化的人类可读数据非常有用,而无需使用外部软件或数据库。
如果您想知道如何开始在Go中操作文本文件,那么本文是适合您的地方。
bufio 包是 Go 标准库的一部分,用于缓冲输入和输出操作,因此得名。 bufio 包基于 io.Reader 和 io.Writer 接口构建,它们广泛用于大多数 Go 标准包的实现。
bufio 包通过实现缓冲更进一步,使其对涉及文本数据的 IO 操作很有用。
要在您的程序中使用 bufio 包,您应该将它与其他包一起导入。
import (
"fmt"
"bufio"
)
当您开始使用 Go 时,您可能听说过它包含作为程序员可能需要的一切。 为了与您的操作系统直接通信,有一个名为 os 的包,它提供了与平台无关的功能。
os 和 bufio 包使文本文件操作变得异常简单。
尽管 os 包的绝大多数函数都是类 Unix 的,但它们都采用 Go 风格的错误处理,这使得阅读错误消息和调试代码变得简单。
那么,如何在Go中操作包含文本的文件呢?
要从文本文件中读取数据,您需要调用 os 包的 Open() 函数,该函数接受要读取的文件名作为参数。 获取文件的另一种方法是使用 OpenFile() 函数。
Open() 和 OpenFile() 之间的主要区别在于它们的实现。 Open() 以只读模式打开文件(使用 O_RDONLY 标志),而 OpenFile() 通过接受三个参数来提供更大的灵活性,即:
标志 |
含义 |
O_RDONLY |
以只读模式打开文件 |
O_WRONLY |
以只写模式打开文件 |
O_RDWR |
以读写模式打开文件 |
O_APPEND |
写入时将数据追加到文件 |
O_CREATE |
创建新文件(如果不存在) |
O_EXCL |
与O_CREATE一起使用,以指示仅当文件不存在时才应创建该文件 |
O_SYNC |
打开同步 I/O 的文件 |
O_TRUNC |
如果可能,在打开时截断文件 |
下面的代码展示了如何使用 os.Open() 和 Scan() 从 Go 中的文本文件中读取数据, 在本例中,Scan() 在 Go for 循环中运行。
package main
import (
"bufio"
"fmt"
"log"
"os"
)
/**
CONTENT OF THE "linuxmi.txt" file.
lorem ipsum dolor sit amet
LOREM IPSUM DOLOR SIT AMET
Lorem ipsum dolor sit amet
Lorem Ipsum Dolor Sit Amet
lOREM iPSUM dOLOR sIT aMET
LoReM IpSuM DoLoR SiT AmEt
*/
func main() {
file, err := os.Open("linuxmi.txt")
// another method using os.OpenFile()
// file, err = os.OpenFile("linuxmi.txt", os.O_RDONLY, 0644)
if err != nil {
log.Fatal(err)
}
defer file.Close()
fmt.Println("File opened successfully. Now reading file contents line by line:")
// create scanner from the file to read text from
scanner := bufio.NewScanner(file)
// scan or read the bytes of text line by line
for scanner.Scan() {
fmt.Println(scanner.Text())
}
if err := scanner.Err(); err != nil {
log.Fatal(err)
}
}
运行上面的代码,它会产生如下所示的输出:
从文件中读取文本的程序输出。
如果你只传入文件名而不是 Open() 或 OpenFile() 函数的路径以进行读取操作,Go 会假定文件在当前目录中,如果找不到则返回错误。 如果您需要处理当前目录之外的文件,您应该传入文件的路径。
bufio 包提供了一个缓冲的 Writer 接口,该接口存储数据字节并在 Flush() 函数的帮助下将它们写入文件。
下一个示例代码是读取文件的延续。 在此示例中,使用 O_WRONLY 和 O_APPEND 标志将数据写入现有的 linuxmi.txt。
将以下代码行添加到上面的程序中,在 main() 函数的右花括号之前:
// 将输出数据写入文件
file, err = os.OpenFile("linuxmi.txt", os.O_APPEND|os.O_WRONLY, 0644)
if err != nil {
log.Fatal(err)
}
defer file.Close()
fmt.Println("文件打开成功,正在准备将数据写入文件...")
// 创建缓冲的 Writer 对象以将数据写入文件
textWriter := bufio.NewWriter(file)
// 在保存文件之前将字符串写入缓冲区。
_, err = textWriter.WriteString("-这是添加到文件中的新文本。")
if err != nil {
log.Fatal(err)
}
textWriter.Flush()
fmt.Println("数据写入文件成功...")
完整程序的输出应如下所示:
程序的输出以读取和写入文本文件。
当您打开 linuxmi.txt 文件时,您还将看到文件末尾附加的新行,如下图所示:
Go 允许您处理各种文件,而不仅仅是文本文件。 有许多额外的内置库和函数用于处理来自文件的不同类型的数据,包括 JSON 和 CSV。
要查看它们在不同情况下的行为方式有何不同,您可以尝试可用于 OpenFile() 的各种标志和文件权限。
网站名称:Go编程语言中使用文本文件指南
路径分享:http://www.mswzjz.cn/qtweb/news10/13660.html
攀枝花网站建设、攀枝花网站运维推广公司-贝锐智能,是专注品牌与效果的网络营销公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 贝锐智能