携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第24天,点击查看活动详情
前言
在Web开发中,文件操作是在开发中经常遇到的问题,文件操作在Web应用中是必须的,非常有用的,我们经常遇到生成文件目录,文件(夹)编辑等操作,不过因为我们平时开发过程中需要直接操作文件的场景其实并不多,所以每次遇到要使用文件操作函数时都需要现查资料,学习Golang又会碰到这样的问题,现在我把Go中的这些操作做一详细总结并实例示范如何使用。
go os包
go的文件操作大部分都在os.File中,封装了对于文件的相关操作,File是个结构体。 具体内容可以查看文件:src/os/types.go
目录操作相关
创建单个目录
func Mkdir(name string, perm FileMode) error
- 可以使用相对路径
- perm是权限设置,例如0777
- 在创建已存在目录的时候报错
示例:
//创建测试目录
err := os.Mkdir("./test", 0777)
根据path创建多级子目录
func MkdirAll(path String, perm FileModE) error
- 可以使用相对路径
- 创建已存在目录不会报错
- 也可以创建单个目录,路径存在不会报错
示例:
//创建连续目录
err := os.Mkdir("./test/test01", 0777)
删除目录
func Remove(name String) error
- 可以使用相对路径
- 删除不存在的路径时会报错
- 当路径不为空的时候会报错
示例:
os.Remove("./test/test01")
根据path删除多级子目录
func RemoveAll(path String) error
- 可以使用相对路径,如果path是单个名称,那么该目录下的子目录全部删除。
- 删除不存在的目录不会报错
- 子目录不为空,包括子目录有文件的时候也不会报错,全部删除
示例:
os.Remove("./test")
重命名
func Rename(oldpath, newpath string) error
示例:
os.Rename("./test/test01", "./test/test02")
文件操作相关
文件操作的函数较多,下面介绍一些我们在开发中常用文件操作函数。
新建文件
func Create(name String) (file *File, err Error)
- 根据提供的文件名创建新的文件,返回一个文件对象,默认权限是0666的文件,返回的文件对象是可读写的。
- 可以使用相对路径
- 当文件存在的时候,函数不报错,会重新创建一个同名文件,原来文件中的内容清除
示例:
file, err := os.Create("./test/file01.text")
打开文件
方法一:
func Open(name String) (file *File, err Error)
该方法打开一个名称为name的文件,但是是只读方式,内部实现其实调用了OpenFile。
示例:
file, err := os.Open("./test/file01.text")
defer file.Close()
方法二:
func OpenFile(name String, flag int, perm uint32) (file *File, err Error)
打开名称为name的文件,flag是打开的方式,只读、读写等,perm是权限。
示例:
file, err := os.OpenFile("./test/file01.text", os.O_WRONLY | os.O_CREATE, 0666)
defer file.Close()
读文件
func (file *FilE) Read(b []bytE) (n int, err Error) //读取数据到b中
func (file *FilE) ReadAt(b []byte, off int64) (n int, err Error) //从off开始读取数据到b中
示例:
file, err := os.OpenFile("./test/file01.text", os.O_WRONLY | os.O_CREATE, 0666)
defer file.Close()
if err != nil {
return
}
buf := make([]byte, 1024)
for {
n, _ := file.Read(buf)
if n == 0 {
break
}
fmt.Println(string(buf[:n]))
}
写文件
func (file *FilE) Write(b []bytE) (n int, err Error)写入byte类型的信息到文件
func (file *FilE) WriteAt(b []byte, off int64) (n int, err Error)在指定位置开始写入byte类型的信息
func (file *FilE) WriteString(s String) (ret int, err Error)写入String信息到文件
示例
file, err := os.OpenFile("./test/file01.text", os.O_WRONLY | os.O_CREATE, 0666)
defer file.Close()
if err != nil {
return
}
file.Write([]byte("1111111111\n"))
file.WriteString("2222222222222\r\n")
删除文件
Go语言里面删除文件和删除文件夹是同一个函数
func Remove(name String) Error
调用该函数就可以删除文件名为name的文件,可以传入相对路径。
常用方法封装
判断目录存在
func FileExist(path string) bool {
err := syscall.Access(path, syscall.F_OK)
return !os.IsNotExist(err)
}
待补充
小结
以上是整理的go常用的文件和目录操作相关的内容,希望文章能够帮你解决go文件操作所遇到的程序开发问题。