文件 基本介绍
文件,对我们并不陌生,文件是数据源(保存数据的地方)的一种,比如大家经常使用的word文档,txt文件,excel文件……都是文件。文件最主要的作用就是保存数据,它既可以保存一张图片,也可以保持视频,声音…
文件在程序当中是以流的形式来操作的。
流:数据在数据源(文件)和程序(内存)之间经历的路径
- 输入流:数据从数据源(文件)到程序(内存)的路径 读文件操作
- 输出流:数据从程序(内存))到数据源(文件)的路径 写文件操作
在go中对文件的操作是由哪个结构体来提供的呢?在go里面有个包叫os包,包里面有个结构体叫File,封装了对所有文件的操作。
os package - os - pkg.go.dev
可以看到上面大多是和File结构体绑定的方法。File代表一个打开文件的对象,有些时候我们称之为文件句柄。
文本文件可以使用string去处理,也可以使用byte去处理,如果处理二进制文件只能使用[]byte去处理。中间不能[]用byte转化为string去处理。
打开关闭文件📃 os.Open File.Close
对一个文件要进行操作,那么首先应该打开一个文件。
- 打开一个文件进行读操作∶os.Open(name string)(*File,error)
- 关闭一个文件∶File.Close()
func Open(name string) (*File, error) 这个Open是os包里面的一个函数,并不是和结构体绑定的方法(打开打开指定文件进行读取。如果成功,则可以使用返回文件上的方法进行读取)(返回的是File结构体的指针,如果打开失败返回error)
这里返回值是一个打开文件之后的File结构体指针,因为在打开的时候文件路径可能是不存在的,也有可能因为文件权限的问题,所以打开文件的时候还要返回一个失败。
当对文件操作完毕之后,比如读或者写,做完之后要注意一件事情,关闭文件。
func (*File) Close
func (f *File) Close() error
Close 关闭文件,使其无法用于 I/O。关闭错误会返回error(要及时关闭文件句柄,否则会有内存泄漏)
示例
//获取到文件结构体指针就可以对文件进行读写操作
//file有些叫文件对象,有些叫file指针,有些叫文件句柄。
path := "test.txt"
file,err := os.Open(path)
if err != nil{
fmt.Println("open file err:",err)
}
fmt.Printf("file = %v",file)
err = file.Close()
if err !=nil{
fmt.Println("close file error")
}
可以看到就是一个地址,指针就是一个地址,文件就是一个指针类型,文件句柄其实也是一个指针。
file = &{0xc000056180}
如果文件不存在
open file err: open test.txt1: no such file or directory
file = <nil>
close file error
可以看到关闭的时候也报错了,因为文件都没打开,怎么去关闭。