1. 简要概述
import "io/ioutil"
包 io/ioutil
实现一些 I/O
实用程序函数。
2. 相关函数
2.1 func ReadAll
func ReadAll(r io.Reader) ([]byte, error)
ReadAll
从 r
读取数据直到 EOF
或遇到 error
,返回读取的数据和遇到的错误。成功的调用返回的 err
为 nil
而非 EOF
。因为本函数定义为读取 r
直到 EOF
,它不会将读取返回的 EOF
视为应报告的错误。
2.2 func ReadFile
func ReadFile(filename string) ([]byte, error)
ReadFile
从 filename
指定的文件中读取数据并返回文件的内容。成功的调用返回的 err
为 nil
而非 EOF
。因为本函数定义为读取整个文件,它不会将读取返回的 EOF
视为应报告的错误。
2.3 func WriteFile
func WriteFile(filename string, data []byte, perm os.FileMode) error
函数向 filename
指定的文件中写入数据。如果文件不存在将按给出的权限创建文件,否则在写入数据之前清空文件。
在 UNIX
型系统中, 文件的默认权限为 0644
,即所有者能够读取和写入,而其他人只能读取。
2.4 func ReadDir
func ReadDir(dirname string) ([]os.FileInfo, error)
返回 dirname
指定的目录的目录信息的有序列表。包含如下信息。
Name
:文件的名称。Size
:文件的长度, 单位为宇节。Mode
: 用二进制位表示的权限。ModTime
:文件最后一个被修改的时间。IsDir
:文件是否是目录。Sys
:底层数据源。
2.5 func TempDir
func TempDir(dir, prefix string) (name string, err error)
在 dir
目录里创建一个新的、使用 prfix
作为前缀的临时文件夹,并返回文件夹的路径。如果 dir
是空字符串, TempDir
使用默认用于临时文件的目录(参见 os.TempDir
函数)。 不同程序同时调用该函数会创建不同的临时目录,调用本函数的程序有责任在不需要临时文件夹时摧毁它。
2.6 func TempFile
func TempFile(dir, prefix string) (f *os.File, err error)
在 dir
目录下创建一个新的、使用 prefix
为前缀的临时文件,以读写模式打开该文件并返回 os.File
指针。如果 dir
是空字符串, TempFile
使用默认用于临时文件的目录(参见 os.TempDir
函数)。不同程序同时调用该函数会创建不同的临时文件,调用本函数的程序有责任在不需要临时文件时摧毁它。
2.7 复制文件
ioutil
包可用于执行一些常见的文件处理操作,但要执行更复杂的操作,应使用 os
包。os
包运行在稍低的层级,因此使用它时,必须手工关闭打开的文件。如果您阅读 os
包的源代码,将发现 ioutil
包中的很多函数都是 os
包包装器,您无须显式地关闭文件。
func main() {
src, err := os.Open("./example05.txt")
if err != nil {
fmt.Println(err)
}
defer src.Close()
/*
使用函数 OpenFile 打开文件。
第一个参数是要打开(如果不存在, 就创建)的文件的名称;
第二个参数是用于文件的标志,在这里指定的是读写文件, 并在文件不存在时创建它;
最后一个参数设置文件的权限。
*/
dst, err := os.OpenFile("./example OS.copy.txt ", os.O_RDWR|os.O_CREATE, 0644)
if err != nil {
fmt.Println(err)
}
defer dst.Close()
_, err = io.Copy(dst, src)
if err != nil {
fmt.Println(err)
}
}
3. 代码示例
package main
import (
"fmt"
"io/ioutil"
"os"
"strings"
)
func main() {
r := strings.NewReader("hello world")
// ReadAll 读取 io.Reader 对象的所有数据,返回读取内容和错误
allContents, err := ioutil.ReadAll(r)
if err != nil {
fmt.Println("ReadAll failed")
}
fmt.Printf("allContents is %#v\n", string(allContents))
// ReadFile 读取文件内容 ,返回读取内容和错误
testFile := "/home/wohu/GoCode/src/task/test.txt"
txtContent, err := ioutil.ReadFile(testFile)
if err != nil {
fmt.Println("ReadFile failed")
}
fmt.Printf("txtContent is %#v\n", string(txtContent))
// WriteFile 读取文本文件内容,返回错误
err = ioutil.WriteFile(testFile, []byte("大漠孤烟直"), 0755)
if err != nil {
fmt.Println("WriteFile failed")
}
// ReadDir 读取某个目录下所有的文件或者目录列表
fileInfos, err := ioutil.ReadDir("./src/task")
if err != nil {
fmt.Println("ReadDir failed")
}
fmt.Printf("ReadDir is %#v\n", fileInfos)
for _, fd := range fileInfos {
fmt.Printf("file or dir is %#v, it's dir: %#v\n",
fd.Name(), fd.IsDir())
}
// TempDir 创建临时目录
tempDir, err := ioutil.TempDir("./src/task/", "temp")
if err != nil {
fmt.Println("TempDir failed")
}
fmt.Printf("tempDir is %#v\n", tempDir)
// TempFile 创建临时目录
tempFile, err := ioutil.TempFile("./src/task/", "temp")
if err != nil {
fmt.Println("TempDir failed")
}
tempFileName := tempFile.Name()
fmt.Printf("tempFile is %#v\n", tempFile)
fmt.Printf("tempFileName is %#v\n", tempFileName)
defer os.RemoveAll(tempDir) // 删除创建的临时目录
defer os.RemoveAll(tempFileName) // 删除创建的临时文件
}