Go でファイルを読み込む方法は大きく 2 つあり、1 つはos
パッケージ内の関数を使用してos.open
ストリーミングで読み込む方法、もう 1 つは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()
}