一、简介
文件操作是开发中极其常见的操作,是每个程序员不能避开的,go的文件操作大部分在os包中,ioutil包和io包也涉及一些文件操作,在这一节,我们从os包出发,讲解go的文件夹的操作,文件的读写操作等。
二、go相关知识
1.目录操作
go的目录操作大部分都在os中
1)创建单独目录函数:
func Mkdir(name string, perm FileMode) error
- 可以使用相对路径
- 在创建已存在目录的时候报错
测试代码:
mkdirerr := os.Mkdir("./test", 0777)
1.1)创建连续目录函数:
func MkdirAll(path string, perm FileMode) error
- 可以使用相对路径
- 创建已存在目录不会报错
- 也可以创建单个目录,路径存在不会报错
测试代码:
mkalldirErr := os.MkdirAll("./test", 0777)
2)删除目录
func Remove(name string) error
- 可以使用相对路径
- 删除不存在的路径时会报错
- 当路径不为空的时候会报错
测试代码:
rmErr := os.Remove("./test")
2.1)删除所有内容
func RemoveAll(path string) error
- 可以使用相对路径
- 删除不存在的目录不会报错
- 子目录不为空,包括子目录有文件的时候也不会报错,全部删除
测试代码:
rmAllErr := os.RemoveAll("./test")
3)判断目录存在
在go中可以使用如下的方法进行文件夹存在判断
func FileExist(path string) bool {
err := syscall.Access(path, syscall.F_OK)
return !os.IsNotExist(err)
}
2.文件操作
文件操作的函数较多,下面介绍一些os中的文件操作函数
1)文件创建函数
func Create(name string) (file *File, err error)
- 文件创建函数,返回一个文件句柄
- 当文件存在的时候,函数不报错,会重新创建一个同名文件,原来文件中的内容清除
- 可以使用相对路径
测试代码:
file, err := os.Create("test.txt")
2)写函数
func (f *File) Write(b []byte) (n int, err error)
func (f *File) WriteString(s string) (ret int, err error)
上面两个函数是file结构体下面的函数:
通过Create函数、Open、OpenFile函数获取file对象后,可以通过file对象进行写入;
测试代码如下:
file, err := os.Create("test.txt")
checkErr(err)
defer file.Close()
file.Write([]byte("this is a test\n"))
file.WriteString("this is a test\r\n")
3)读函数
func (f *File) Read(b []byte) (n int, err error)
func (f *File) ReadAt(b []byte, off int64) (n int, err error)
上面的两个函数也是file类型下的函数,通过Create函数、Open、OpenFile函数获取file对象后,可以通过file对象进行读取
测试代码:
testfile, err := os.Open("test.txt")
checkErr(err)
defer testfile.Close()
buf := make([]byte, 1024)
for {
n, _ := testfile.Read(buf)
if n == 0 {
break
}
fmt.Println(string(buf[:n]))
}
相同的内容在下面的公众号中也有发布,每天分享一些编程知识与技巧,感兴趣的朋友可以加关注,感谢支持!!