Go语言常用文件操作汇总,建议收藏

177 阅读4分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 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文件操作所遇到的程序开发问题。