Go读取文件一般有两种方式,一种方式是采用os
包下的os.open
函数进行流式读取,另一种方式是采用ioutil
包的ioutil.ReadFile
函数进行读取,二者的区别在于后者会一次性将文件内容全部加载到内存中。
由于os.open
函数会返回一个文件对象,所以需要配合bufio
或者ioutil
使用。
以下是具体使用的实例:
package main
import (
"bufio"
"fmt"
"io/ioutil"
"os"
)
func main() {
file := "H:\\go\\main\\1.txt"
ReadByIoUntil(file)
ReadByOs(file)
}
func ReadByIoUntil(filename string) {
fmt.Println("-------通过ioutil.ReadFile读取---------")
data, err := ioutil.ReadFile(filename)
if err != nil {
fmt.Fprintf(os.Stderr, "error reading file: %v\n", err)
}
fmt.Println(string(data))
}
func ReadByOs(filename string) {
fmt.Println("-------通过os.Open读取---------")
f, err := os.Open(filename)
if err != nil {
fmt.Fprintf(os.Stderr, "error reading file: %v\n", err)
}
//采用bufio读取文件内容
input := bufio.NewScanner(f)
for input.Scan() {
fmt.Println(input.Text())
}
//采用ioutil读取文件内容,由于流是一次性的,所以上面的代码输出后,下面的Println将不再打印任何东西
contents, err := ioutil.ReadAll(f)
fmt.Println(contents)
f.Close()
}