首页 > 编程笔记 > Go语言笔记 阅读:7

Go语言ioutil包读写文件(附带实例)

Go 语言除了内置包 os 读写文件之外,还提供了内置包 io/ioutil 实现文件读写,对比 os,io/ioutil 的性能有明显优势。

内置包 io/ioutil 定义了 7 个函数,每个函数的功能说明如下:

函数 功能
NopCloser(r io.Reader) io.ReadCloser 为文件对象(即参数 r)提供 close()(关闭)功能。参数 r 为 io.Reader 类型(即结构体 Reader),返回值为 io.ReadCloser 类型。
ReadAll(r io.Reader) ([]byte, error) 读取文件所有数据。参数 r 为 io.Reader 类型(即结构体 Reader),返回值 []byte 存放数据,返回值 error 是函数执行的错误信息。
ReadDir(dirname string) ([]fs.FileInfo, error) 从目录下获取所有文件对象。参数 dirname 是字符串类型,代表目录的路径信息;返回值 []fs.FileInfo 是所有文件对象;返回值 error 是函数执行的错误信息。
ReadFile(filename string) ([]byte, error) 读取文件内容。参数 filename 是字符串类型,代表文件的路径信息;返回值 []byte 存放文件内容;返回值 error 是函数执行的错误信息。
WriteFile(filename string, data []byte, perm fs.FileMode) 在文件中写入数据,不支持文件内容续写,每次调用会覆盖原有数据。参数 filename 是字符串类型,代表文件的路径信息;参数 data 是字节类型的切片,代表写入文件的数据;参数 perm 是 fs.FileMode 类型,代表文件权限,一般设置为 0644 即可;返回值 error 是函数执行的错误信息,若为空值 nil,则代表写入成功。
TempDir(dir, pattern string) (name string, err error) 创建临时文件夹。参数 dir 是创建的路径,参数 pattern 是文件夹名称,返回值 name 是创建后的路径信息,返回值 error 是函数执行的错误信息。
TempFile(dir, pattern string) (f *os.File, err error) 创建临时文件。参数 dir 是创建的路径,参数 pattern 是文件名称,返回值 f 是创建后的文件对象,返回值 error 是函数执行的错误信息。

下面通过一个简单的例子来演示如何使用内置包 io/ioutil 的 7 个函数,示例如下:
package main

import (
   "fmt"
   "io/ioutil"
   "os"
)

func main() {
   // 使用os包创建文件
   f, _ := os.OpenFile("output.txt", os.O_RDWR|os.O_SYNC, 0)
   // 返回ReadCloser对象提供close函数
   f1 := ioutil.NopCloser(f)
   defer f1.Close()

   // ReadAll()读取所有数据
   p, _ := ioutil.ReadAll(f)
   // 将数据从字节切片转换为字符串
   fmt.Printf("ReadAll()读取所有数据:%v\n", string(p))

   // ReadDir返回目录下所有文件切片
   fileInfo, _ := ioutil.ReadDir("./")
   for _, data := range fileInfo {
        fmt.Printf("ReadDir()的文件信息:%v\n", data.Name())
   }

   // 读取整个文件数据
   data, _ := ioutil.ReadFile("output.txt")
   // 将数据从字节切片转换为字符串
   fmt.Printf("ReadFile()读取文件内容:%v\n", string(data))

   // 往文件写入数据,不支持文件内容续写,每次调用会覆盖原有数据
   ioutil.WriteFile("output.txt", []byte("111"), 0655)

   // 在当前路径下创建test前缀的临时文件夹,返回文件夹名称
   dir, _ := ioutil.TempDir("./", "test")
   fmt.Printf("TempDir()创建的文件夹:%v\n", dir)

   // 在当前路径下创建test前缀的临时文件,返回os.File指针
   fs, _ := ioutil.TempFile("./", "test")
   // 使用os的Write()写入数据
   fs.Write([]byte("222"))
   fs.Close()
}
运行上述代码,运行结果为:
ReadAll()读取所有数据:111111111111111111111
ReadDir()的文件信息:.idea
ReadDir()的文件信息:chapter14.2.2.go
ReadDir()的文件信息:chapter14.3.go
ReadDir()的文件信息:go.mod
ReadDir()的文件信息:go.sum
ReadDir()的文件信息:output.txt
ReadFile()读取文件内容:111111111111111111111
TempDir()创建的文件夹:test139503931
并且在同一目录下自动创建了以 test 开头的文件夹和文件。

综上所述,使用 io/ioutil 包读写文件的总结如下:

相关文章