ioutil包使用
Salted Fish 1991/6/26 包使用
# 1.介绍
在Go语言中,io包主要声明的是对I/O操作的基本接口,而io/ioutil包则实现了对应的方法,方便我们直接使用。
# 2.方法列表
| 方法名 | 描述 |
|---|---|
NopCloser | 对Reader进行封装,返回一个ReadCloser |
ReadAll | 对 Reader 进行读取, 直到发生错误或者遇到EOF 为止, 然后返回被读取的数据。 |
ReadFile | 读取指定文件的内容,并返回。 |
ReadDir | 读取 指定的目录, 并返回排序后的目录列表(根据名称排序) |
TempDir | 在指定目录新创建一个临时目录, 并返回该目录的路径 |
TempFile | 在指定目录新创建一个临时文件, 以可读写的方式打开它, 并返回 *os.File 指针 |
WriteFile | 将给定的数据 写入到指定文件里面。 如果文件不存在, 则去创建它; 如果文件已经存在, 则再写入之前会先清空文件中已有的内容。 |
# 3.ReadAll
# 3.1 方法签名
func ReadAll(r io.Reader) ([]byte, error)
1
ReadAll从r读取数据直到EOF或error,返回读取内容([]byte)和错误(error)。读取成功时err返回nil。因为本函数定义为读取r直到EOF,它不会将读取返回的EOF视为应报告的错误。
# 3.2 使用
func main() {
// NewReader创建一个从s读取数据的Reader。本函数类似bytes.NewBufferString
reader := strings.NewReader("Hello word !")
all, err := ioutil.ReadAll(reader)
if err != nil {
fmt.Println(err)
return
}
fmt.Printf("%s",all)
}
// 输出: Hello word !
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
# 4.ReadFile
# 4.1 方法签名
func ReadFile(filename string) ([]byte, error)
1
ReadFile 从filename指定的文件中读取内容并返回。读取成功时err返回nil。因为本函数定义为读取r直到EOF,它不会将读取返回的EOF视为应报告的错误。
# 4.2 使用
func main() {
// 文件路径
fileName := "./test.log"
data, err := ioutil.ReadFile(fileName)
if err != nil {
fmt.Println(err)
return
}
fmt.Printf("%s",data)
}
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
# 5.ReadDir
# 5.1 方法签名
func ReadDir(dirname string) ([]os.FileInfo, error)
1
返回dirname指定的目录的目录信息的有序列表。
# 5.2 使用
func main() {
dirName := "./log"
dirList, err := ioutil.ReadDir(dirName)
if err != nil {
fmt.Println(err)
return
}
for _, info := range dirList {
fmt.Println(info.Name())
}
}
/**输出
d1
test.log
*/
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# 6.TempDir
# 6.1 方法签名
func TempDir(dir, pattern string) (name string, err error)
1
在dir目录里创建一个新的、使用pattern作为前缀的临时文件夹,并返回文件夹的路径。
- 如果
dir是空字符串,TempDir使用默认用于临时文件的目录。 - 不同程序同时调用该函数会创建不同的临时目录,
- 创建的临时文件夹时在不使用时,需要删除。
# 6.2 使用
func main() {
var pathList []string
for i := 0; i < 4; i++ {
var path string
var err error
switch i {
case 0:
// 指定目录和前缀
path, err = ioutil.TempDir("./log","tmp_")
case 1:
// 只指定目录
path, err = ioutil.TempDir("./log","")
case 2:
// 目录为空、前缀不为空
path, err = ioutil.TempDir("","tmp_")
case 3:
// 目录和前缀都是空
path, err = ioutil.TempDir("","")
}
if err != nil {
fmt.Println(err)
continue
}
pathList = append(pathList, path)
// 删除临时目录,测试时注释
// _ = os.RemoveAll(path)
}
fmt.Println(pathList)
}
/**输出
[log/tmp_984088491 log/346734350 /var/folders/8f/vnx2y1h57nzbd2p4vtcl6hv80000gn/T/tmp_561537301 /var/folders/8f/vnx2y1h57nzbd2p4vtcl6hv80000gn/T/840593776]
*/
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
28
29
30
31
32
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
28
29
30
31
32

# 7.TempFile
# 7.1 方法签名
func TempFile(dir, pattern string) (f *os.File, err error)
1
在dir目录下创建一个新的、使用pattern为前缀的临时文件,以读写模式打开该文件并返回os.File指针。
- 如果
dir是空字符串,TempFile使用默认用于临时文件的目录。 - 不同程序同时调用该函数会创建不同的临时文件。
- 创建的临时文件夹时在不使用时,需要删除。
# 7.2 使用
func main() {
var fileList []string
for i := 0; i < 4; i++ {
var file *os.File
var err error
switch i {
case 0:
// 指定目录和前缀
file, err = ioutil.TempFile("./log", "tmp_")
case 1:
// 只指定目录
file, err = ioutil.TempFile("./log", "")
case 2:
// 目录为空、前缀不为空
file, err = ioutil.TempFile("", "tmp_")
case 3:
// 目录和前缀都是空
file, err = ioutil.TempFile("", "")
}
if err != nil {
fmt.Println(err)
continue
}
fileList = append(fileList, file.Name())
//删除
//_ = os.Remove(file.Name())
}
fmt.Println(fileList)
}
/**输出
[log/tmp_598309912 log/983448727 /var/folders/8f/vnx2y1h57nzbd2p4vtcl6hv80000gn/T/tmp_134984970 /var/folders/8f/vnx2y1h57nzbd2p4vtcl6hv80000gn/T/246937825]
*/
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
28
29
30
31
32
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
28
29
30
31
32
