在 Golang 中,读取 文件 有四种方法,分别为:使用 ioutil.ReadFile 读取文件,使用 file.Read 读取文件,使用 bufio.NewReader 读取文件,使用 ioutil.ReadAll 读取文件。
func (f *File) Read(b []byte) (n int, err error)
参数 | 描述 |
---|---|
f | 打开的文件句柄。 |
b | 读取文件内容存放的指针。 |
返回值 | 说明 |
---|---|
n | 读取到的字节数。 |
err | 如果读取失败,返回错误信息,否则,返回 nil。 |
使用 file.Read 读取文件时,首先,我们需要打开文件,接着, 使用打开的文件返回的文件句柄,来读取文件。
文件读取结束的标志是返回的 n 等于 0,因此,如果我们需要读取整个文件内容,那么我们需要使用 for 循环 不停的读取文件,直到 n 等于 0。
使用 file.Read 读取文件
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 := file.Read(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 来关闭文件。接着,我们使用 for循环来不停的读取文件,直到出现错误或者读取到的文件内容的长度为 0,说明读取结束,结束循环。
每执行一次循环后,我们将读取到的内容追加到缓冲区,最后,我们打印整个缓冲区的内容,就是读取到的文件内容。接着,我们删除 “C:/haicoder.txt” 文件,再一次运行程序,程序输出如下:
我们删除文件后,我们看到,再次读取文件,程序报错,因为文件不存在。
func (f *File) Read(b []byte) (n int, err error)
使用 file.Read 读取文件时,首先,我们需要打开文件,接着, 使用打开的文件返回的文件句柄,来读取文件。
文件读取结束的标志是返回的 n 等于 0,因此,如果我们需要读取整个文件内容,那么我们需要使用 for循环不停的读取文件,直到 n 等于 0。