您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息
免费发信息
三六零分类信息网 > 衢州分类信息网,免费分类信息发布

Go语言怎么读取文件?多种方式浅析

2024/3/28 10:19:30发布35次查看
这篇文章将讨论如何在 golang 中读取文件。我们将使用以下包来处理这些文件。
os 包提供了一个独立于平台的接口来执行操作级操作。ioutil 软件包提供了易于使用的实用程序函数来处理文件,而无需了解太多内部实现。bufio 包实现了缓冲 io,这有助于我们提高输入和输出操作的性能和吞吐量。log 包实现一个简单的日志记录包。我们将在整个程序中使用它。我们将在程序中使用日志包的 fatal() 函数。整个文件读取我们可以很容易地一次性读取整个文件并将其存储在一个变量中。但请记住,我们不应该对大文件这样做。我们将使用ioutil.readfile() 函数来读取文件并将文件的内容存储在一个变量中。
首先,让我们在我们程序所在的同一目录下存储一个文件。因此,我们的文件夹结构将是下面这样的。
___ | |_ _ _ _ ilovego.txt | |_ _ _ _ main.go
我们在 main.go 函数中写入如下的内容:
package mainimport ( "fmt" "io/ioutil" "log")func main() { content, err := ioutil.readfile("ilovego.txt") if err != nil { log.fatal(err) } fmt.println(string(content))}
但首先,让我们讨论一下 readfile() 函数的情况:
定义:方法声明 func readfile(filename string) ([]byte, error)功能:读取路径被传入函数参数的文件,并返回文件的内容。在内部使用 os.readfile(filename) 方法返回:在一个字节数组中返回文件的内容和错误。一个成功的调用将返回 err == nil内部 readfile 函数实现如下:
func readfile(filename string) ([]byte, error) { return os.readfile(filename)}
现在,让我们回到我们的程序:
ioutil.readfile("readthisfile.txt") 返回一个 bytearray 和一个 err。我们将bytearray 存储在 "content "变量中,错误存储在 " err "变量中。然后我们放置了一个 if 条件,如果 err 值不为 nil,我们将使用 log.fatal() 函数打印错误 err 。记住,fatal() 函数等同于 print() 函数,然后调用 os.exit(1) 。最后,我们将使用 fmt.println() 函数打印文件的内容。 我们不能简单地打印 content 变量,因为它是一个字节数组,我们需要将它转换为字符串: string(content)然后新建一个 ilovego.txt 文件,写入如下内容:
i love golang,this is one of the best languages on the world!
最后,执行上述代码,可以看到如下输出:
$ go run main.goi love golang, this is one of the best languages on the world!
按行读取scanner 扫描器提供了一个方便的接口来读取数据,比如一个由新行分隔的文本行组成的文件。它通过标记来读取数据;split 函数定义了标记。默认情况下,该函数将数据分成几行,并剥离了行端。
package mainimport ( "fmt" // "io/ioutil" "bufio" "log" "os")func main() { // opening the file using open function f, err := os.open("ilovego.txt") if err != nil { log.fatal(err) } defer f.close() // create a scanner for the file scanner := bufio.newscanner(f) // loop through the scanner until it return fasle for scanner.scan() { fmt.println(scanner.text()) } if err := scanner.err(); err != nil { log.fatal(err) }}
os.open() 打开参数中传递的文件。如果在打开文件时遇到任何错误,它将返回同样的错误。否则,错误将是 nil。然后,我们使用扫描器来读取文件,并逐行扫描,直到文件内容结束。最后,我们要关闭该文件。执行程序,结果如下:
逐个单词读取我们还可以通过逐个单词来读取文件:
package mainimport ( "bufio" "fmt" "os")func main() { f, err := os.open("ilovego.txt") if err != nil { fmt.println(err) } defer f.close() scanner := bufio.newscanner(f) scanner.split(bufio.scanwords) for scanner.scan() { fmt.println(scanner.text()) } if err := scanner.err(); err != nil { fmt.println(err) }}
运行代码:
$ go run main.goilovegolang,thisisoneofthebestlanguagesontheworld!
以数据块的形式读取文件一次性读取整个文件似乎是一种简单的方法,但有时我们需要从内存管理的角度使我们的程序得到一些优化。golang 提供了一种分块读取文件的方法,而不是整个或甚至逐行读取。因为如果一行的大小太大,逐行读取也可能是低效的。
package mainimport ( "bufio" "fmt" "io" "log" "os")func main() { f, err := os.open("ilovego.txt") if err != nil { log.fatal(err) } defer f.close() reader := bufio.newreader(f) buf := make([]byte, 16) for { // reading a file upto buffer n, err := reader.read(buf) if err != nil { if err != io.eof { log.fatal(err) } break } fmt.print(string(buf[0:n])) } fmt.println()}
二进制读取hex 包实现了十六进制的编码和解码。
package mainimport ( "bufio" "encoding/hex" "fmt" "io" "log" "os")func main() { f, err := os.open("sid.jpg") if err != nil { log.fatal(err) } defer f.close() reader := bufio.newreader(f) buf := make([]byte, 256) for { _, err := reader.read(buf) if err != nil { if err != io.eof { fmt.println(err) } break } fmt.printf("%s", hex.dump(buf)) }}
总结本文介绍了 go 语言读取文件的几种方式,ioutil.readfile 函数将整个文件读成一个字符串。这个函数很方便,但不应该用于非常大的文件。希望能对你有所帮助!
推荐学习:golang教程
以上就是go语言怎么读取文件?多种方式浅析的详细内容。
衢州分类信息网,免费分类信息发布

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录