在前面的文章中,我们使用Stdin
来读数据还有如何读取文件中的内容。在本文中我们将把两者结合起来,给大家展示如何从文件读入字符串。
从文件读入字符串
Golang 版本
1.12.1
前言
在前面的文章中,我们使用Stdin
来读数据还有如何读取文件中的内容。在本文中我们将把两者结合起来,给大家展示如何从文件读入字符串。
实现
创建tmp
目录,在tmp
目录中创建file.txt
文件,并在文件内写入如下内容:
这是文件内容
创建文件readfile.go
,代码如下:
package main
import (
"bufio"
"bytes"
"fmt"
"io/ioutil"
"os"
)
func main() {
fmt.Println("### 用reader读取文件 ###")
f, err := os.Open("temp/file.txt")
if err != nil {
panic(err)
}
defer f.Close()
// 用reader读取文件
wr := bytes.Buffer{}
sc := bufio.NewScanner(f)
for sc.Scan() {
wr.WriteString(sc.Text())
}
fmt.Println(wr.String())
fmt.Println("### ReadFile ###")
// 对于较小的文件
fContent, err := ioutil.ReadFile("temp/file.txt")
if err != nil {
panic(err)
}
fmt.Println(string(fContent))
}
$ go run readfile.go
### 用reader读取文件 ###
这是文件内容
### ReadFile ###
这是文件内容
原理
从文件中读取很简单,因为File
类型实现了Reader
和Writer
接口。这样,所有适用于Reader
接口的函数和方法都适用于File
类型。上面的示例展示了如何使用Scanner
读取文件,并将内容写入字节缓冲区(这比直接通过字符串连接性能更好)。这样,就可以控制从文件读取的内容量了。
使用ioutil.ReadFile
的第二种方法更简单,但应谨慎使用,因为它会读取整个文件。 请记住,文件可能很大,可能会威胁到应用程序的稳定性。