Golang ioutil包

ReadAll

ReadAll方法,我们比较常用的工具类方法,一次性读取文件的所有内容并返回,适用于读取小文件,如果文件太大会占用太多内存。调用 ReadAll 方法成功,会读取 io.Reader的所有内容,返回的 err == nil,而不是 err == EOF,因为读取完所有数据了,完成了我们的任务,此时 EOF 不应当是 error.

Go 复制代码
func main() { 	
    file, err := os.Open("test.txt") 	
    if err != nil {   
        fmt.Println("open file err")   
        return 	
    }  	
    c, err := ioutil.ReadAll(file) 	
    fmt.Println(err) 	
    fmt.Println(string(c)) 
}

原型

Go 复制代码
func ReadAll(r io.Reader)([]byte,error){
    return readAll(r,bytes.MinRead)
}

ReadFile

ReadFile 根据文件名读取文件,返回文件的所有内容以及读取过程中产生的error,与ReadAll类似,读取完文件后,EOF 不算做 error,因为已经完成了任务。

WriteFile

WriteFile 方法将数据写入文件,如果文件不存在,会先新建文件;如果已存在,会把之前的数据先清空再写入

ReadDir

ReadDir 用于获取文件夹下面的所有文件信息(文件夹+文件),返回的数据是文件名有序的

Go 复制代码
fileList, err := ioutil.ReadDir("/Users/admin/study")
for _, f := range fileList {
	fmt.Println(f.Name(), f.IsDir())
}

Discard

Discard 如名字一样,是一个用于丢弃数据的地方,虽然有时候我们不在意数据内容,但可能存在数据不读出来就无法关闭连接的情况,这时候就可以使用 io.Copy(ioutil.Discard, io.Reader) 将数据写入 Discard。

TempDir

在 Go 语言中,包 os 提供了函数 os.TempDir() 返回当前操作系统下的临时目录。

其次 io/ioutil 包也提供了 ioutil.TempDir() 函数用于在指定目录中创建一个临时文件夹。该函数的原型如下

Go 复制代码
func TempDir(dir, prefix string) (name string, err error)

如果未指定 dir ,那么会自动调用 os.TempDir() 返回的临时目录作为跟目录。

TempFile

Go 复制代码
func TempFile(dir, pattern string) (f *os.File, err error)

dir 参数用于指定临时文件保存的文件夹,如果为空字符串,那么会自动调用 os.TempDir() 返回的临时目录作为目录。而 pattern用于指定临时文件的文件名格式。

pattern 是一个类似正则表达式的文件名格式,可以使用 * 代表随机字符串的位置。如果pattern中没有 * 号,那么会自动将随机字符串添加到文件名的末尾

该函数返回一个 os.File 类型的文件指针,我们可以使用该类型提供的各种函数读写该文件。

例外需要注意的是,虽然系统可能会自动删除临时文件,但这并不一定会发生,所以,使用完毕之后记得调用 os.Remove(tmpfile.Name()) 来删除临时文件,当然了,前面一般添加 defer 关键字,如下

Go 复制代码
defer os.Remove(tmpfile.Name())
相关推荐
luj_17684 小时前
残熵算法实时化三大瓶颈突破
c语言·开发语言·网络·经验分享·算法
不听话坏5 小时前
Ignition篇(下 一) 动态执行前的事情
开发语言·前端·javascript
mCell5 小时前
你以为短链接只是 Hash + 301/302?
后端·算法·架构
likeyi075 小时前
require 和 import的区别
开发语言·前端
咖啡八杯5 小时前
GoF设计模式——迭代器模式
java·后端·设计模式·迭代器模式
远离UE45 小时前
UE5 compute shader 原子加
开发语言·c++·ue5
C+-C资深大佬6 小时前
C++ 显式类型转换详解:static_cast、dynamic_cast、const_cast、reinterpret_cast
开发语言·c++
KaMeidebaby6 小时前
卡梅德生物技术快报|抗体亲和力成熟工业化调控新机制:差异性浆细胞增殖工艺优化思路
java·开发语言·人工智能·算法·机器学习·架构·spark
luj_17687 小时前
心形曲线轨迹控制三大关键技术
c语言·开发语言·c++·经验分享·算法
Mininglamp_27188 小时前
Claude Code 封禁中国开发者之后:本地 AI 编程工具的替代方案实测
开发语言·人工智能·windows·开源软件·ai-native