资料总结 资料总结
首页
go
java
云原生
  • mysql
  • redis
  • MongoDB
  • 设计模式详解
  • 数据结构与算法
  • 前端
  • 项目
  • 理论基础
  • 运营
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

linghui Wu

一只努力学飞的鱼
首页
go
java
云原生
  • mysql
  • redis
  • MongoDB
  • 设计模式详解
  • 数据结构与算法
  • 前端
  • 项目
  • 理论基础
  • 运营
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • go入门教程

  • go标准库

    • fmt标准库
    • os标准库
    • time标准库
    • log标准库
    • errors标准库
    • bytes标准库
    • io标准库
    • ioutil标准库
      • 1 NopCloser
      • 2 ReadAll
      • 3 ReadDir
      • 4 ReadFile
      • 5 WriteFile
      • 6 TempDir
      • 7 TempFile
    • bufio标准库
    • builtin标准库
    • json标准库
    • sort标准库
    • math标准库
    • flag标准库
    • runtime标准库
    • context标准库
  • go常用第三方类库

  • ORM框架

  • web框架

  • 移动端

  • go
  • go标准库
wulinghui
2023-01-22
目录

ioutil标准库

# ioutil标准库

ioutil包封装了一些I/O实用程序函数。

函数 说明
ReadAll 读取数据,返回读到的字节slice
ReadDir 读取一个目录,返回目录入口数组[]os.FileInfo
ReadFile 读取一个文件,返回读到的文件内容字节slice
WriteFile 根据文件路径,写入字节slice
TempDir 在一个目录中创建指定前缀名的临时目录,返回新临时目录的路径
TempFile 在一个目录中创建指定前缀名的临时文件,返回os.File
NopCloser 用一个无操作的Close方法包装文件并返回一个ReadCloser接口。

# 1 NopCloser

func NopCloser(r io.Reader) io.ReadCloser
1

就是将一个不带 Close 的 Reader 封装成 ReadCloser。

实例演示:

package main

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

func main() {
	f, err := os.Open("a.txt")
	if err != nil {
		fmt.Printf("err: %v\n", err)
	}
	readCloser := ioutil.NopCloser(f)
	fmt.Printf("readCloser: %v\n", readCloser)
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

# 2 ReadAll

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

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

实例演示:

package main

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

func main() {
	f, _ := os.Open("a.txt") // File实现了Reader
	defer f.Close()

	b, err := ioutil.ReadAll(f)

	if err != nil {
		fmt.Printf("err: %v\n", err)
	}

	fmt.Printf("string(b): %v\n", string(b))
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

# 3 ReadDir

func ReadDir(dirname string) ([]fs.FileInfo, error)
1

读取dirname目录内的所有文件信息,注意此序列有序。

实例演示:

package main

import (
	"fmt"
	"io/ioutil"
)

func main() {
	fi, _ := ioutil.ReadDir(".")
	for _, v := range fi {
		fmt.Printf("v.Name(): %v\n", v.Name())
	}
}
1
2
3
4
5
6
7
8
9
10
11
12
13

# 4 ReadFile

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

从filename指定的文件中读取数据并返回文件的内容。对err的判断和ReadAll一样。

package main

import (
	"fmt"
	"io/ioutil"
)

func main() {
	b, _ := ioutil.ReadFile("a.txt")
	fmt.Printf("string(b): %v\n", string(b))
}

1
2
3
4
5
6
7
8
9
10
11
12

# 5 WriteFile

func WriteFile(filename string, data []byte, perm fs.FileMode) error
1

函数向filename指定的文件中写入数据。如果文件不存在将按给出的perm权限创建文件,否则在写入数据之前清空文件。

实例演示:

package main

import (
	"io/ioutil"
)

func main() {
	ioutil.WriteFile("a.txt", []byte("hello world"), 0664)
}
1
2
3
4
5
6
7
8
9

# 6 TempDir

func TempDir(dir, pattern string) (name string, err error)
1

在dir目录里创建一个新的、使用prefix作为前缀的临时文件夹,并返回文件夹的路径。如果dir是空字符串,TempDir使用默认用于临时文件的目录(参见os.TempDir函数)。 不同程序同时调用该函数会创建不同的临时目录,调用本函数的程序有责任在不需要临时文件夹时摧毁它。

实例演示:

package main

import (
	"fmt"
	"io/ioutil"
	"log"
	"path/filepath"
)

func main() {
	content := []byte("temporary file's content")
	dir, err := ioutil.TempDir("", "example")
	if err != nil {
		log.Fatal(err)
	}

	fmt.Printf("dir: %v\n", dir)
	// defer os.RemoveAll(dir) // 销毁临时目录

	tmpfn := filepath.Join(dir, "tmpfile")
	if err := ioutil.WriteFile(tmpfn, content, 0666); err != nil {
		log.Fatal(err)
	}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24

# 7 TempFile

func TempFile(dir, pattern string) (f *os.File, err error)
1

在dir目录下创建一个新的、使用prefix为前缀的临时文件,以读写模式打开该文件并返回os.File指针。如果dir是空字符串,TempFile使用默认用于临时文件的目录(参见os.TempDir函数)。责任与TempDir相同。

实例演示:

package main

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

func main() {
	content := []byte("temporary file's content")
	tmpfile, err := ioutil.TempFile("", "example")
	if err != nil {
		log.Fatal(err)
	}

	fmt.Printf("tmpfile.Name(): %v\n", tmpfile.Name())

	// defer os.Remove(tmpfile.Name()) // 销毁临时文件

	if _, err := tmpfile.Write(content); err != nil {
		log.Fatal(err)
	}
	if err := tmpfile.Close(); err != nil {
		log.Fatal(err)
	}

}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
编辑 (opens new window)
上次更新: 2023/01/22, 23:01:13
io标准库
bufio标准库

← io标准库 bufio标准库→

最近更新
01
架构升级踩坑之路
02-27
02
总结
02-27
03
语法学习
02-27
更多文章>
| Copyright © 2021-2025 Wu lingui |
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式