Go 学习笔记(49)— Go 标准库之 io/ioutil(读写文件、获取目录下的文件和子目录、创建临时目录和文件)

1. 简要概述

import "io/ioutil"

io/ioutil 实现一些 I/O 实用程序函数。

2. 相关函数

2.1 func ReadAll

func ReadAll(r io.Reader) ([]byte, error)

ReadAllr 读取数据直到 EOF 或遇到 error ,返回读取的数据和遇到的错误。成功的调用返回的 errnil 而非 EOF 。因为本函数定义为读取 r 直到 EOF ,它不会将读取返回的 EOF 视为应报告的错误。

2.2 func ReadFile

func ReadFile(filename string) ([]byte, error)

ReadFilefilename 指定的文件中读取数据并返回文件的内容。成功的调用返回的 errnil 而非 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) // 删除创建的临时文件
}

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值