在 Golang 中,读取 文件 有四种方法,分别为:使用 ioutil.ReadFile 读取文件,使用 file.Read 读取文件,使用 bufio.NewReader 读取文件,使用 ioutil.ReadAll 读取文件。
r := bufio.NewReader(file) n, err := r.Read(buf)
参数 | 描述 |
---|---|
file | 要读取的文件句柄。 |
buf | 读取的数据存放的缓冲区。 |
返回值 | 描述 |
---|---|
n | 读取到的长度。 |
err | 读取失败,则返回错误信息。 |
使用 NewReader 读取文件时,首先,我们需要打开文件,接着, 使用打开的文件返回的文件句柄当作 函数参数 传入 NewReader。
最后,我们使用 NewReader 返回的 reader 对象调用 Read 来读取文件。文件读取结束的标志是返回的 n 等于 0,因此,如果我们需要读取整个文件内容,那么我们需要使用 for 循环 不停的读取文件,直到 n 等于 0。
使用 NewReader 读取文件
package main
import (
"fmt"
"io"
"os"
)
func main() {
fmt.Println("嗨客网(www.haicoder.net)")
fileName := "C:/haicoder.txt"
file, err := os.Open(fileName)
if err != nil{
fmt.Println("Read file err, err =", err)
return
}
defer file.Close()
var chunk []byte
buf := make([]byte, 1024)
for{
n, err := NewReader(buf)
if err != nil && err != io.EOF{
fmt.Println("read buf fail", err)
return
}
//说明读取结束
if n == 0 {
break
}
//读取到最终的缓冲区中
chunk = append(chunk, buf[:n]...)
}
fmt.Println("File Content =", string(chunk))
}
程序运行后,控制台输出如下:
首先,我们使用 os.Open 打开文件,如果文件打开成功,那么就使用 defer 来关闭文件。接着,使用打开的文件返回的文件句柄当作函数参数传入 NewReader,并使用 NewReader 返回的 reader 对象调用 Read 来读取文件。
最会,我们使用 for循环来不停的读取文件,直到出现错误或者读取到的文件内容的长度为 0,说明读取结束,结束循环。
每执行一次循环后,我们将读取到的内容追加到缓冲区,最后,我们打印整个缓冲区的内容,就是读取到的文件内容。
r := bufio.NewReader(file) n, err := r.Read(buf)
使用 NewReader 读取文件时,首先,我们需要打开文件,接着, 使用打开的文件返回的文件句柄当作函数参数传入 NewReader。
最后,我们使用 NewReader 返回的 reader 对象调用 Read 来读取文件。文件读取结束的标志是返回的 n 等于 0,因此,如果我们需要读取整个文件内容,那么我们需要使用 for 循环不停的读取文件,直到 n 等于 0。