GO语言-文件操作【GO学习之路】

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第16天,点击查看活动详情

前言

本文将进入GO语言一个重要知识块-文件操作。其实每种编程语言都会涉及文件处理,C/C++,Java等,现在来学习Go语言文件操作处理。

本文大纲

GO语言-文件操作.png

1、文件读操作

首先介绍一个Go语言的工具包 os,文件的一般操作工具方法,这里面都已提供。

  • 创建新文件;
  • 获取文件资源的相对路径和绝对路径;
  • 重命名文件或文件夹;
  • 删除文件或文件夹

file类是在os包中的,封装了底层的文件描述符和相关信息,同时封装了Read和Write的实现。

创建文件

f, err := os.Create("gotest.txt")
fmt.Println(f)		// 打印文件指针
f.Close()		// 打开的资源不使用时必须关闭
复制代码

调用Create()创建文件时:

  • 若文件不存在,则创建空白文件
  • 若文件存在,则清空文件内容
  • Create()创建的文件任何人都可以读写

文件操作权限

Go语言中 文件操作权限设置。不需要创建新文件时可以将其设定为0。针对于权限,go语言设定了很多的常量,但是习惯上也可以直接使用数字,如0666(具体含义和Unix系统的一致)。

linux 下有2种文件权限表示方式,即“符号表示”和“八进制表示”。

(1)符号表示方式: type(-) owner(---) group(---) others(---)

文件的权限是这样子分配的 读 写 可执行 分别对应的是 r w x

如果没有那一个权限,用 - 代替(-文件 d目录 |连接符号) 例如:-rwxr-xr-x

(2)八进制表示方式:

  1. r ——> 004
  2. w ——> 002
  3. x ——> 001
  4. - ——> 000

打开文件,写入内容

打开文件的两种方式:

  • Open():以只读权限打开文件,若文件不存在则会打开失败
  • OpenFile(p1, p2, p3):打开文件时,可以传入打开方式,该函数三个参数:
    • p1:文件路径
    • p2:文件打开模式,如 O_RDONLYO_WRONGLY,还可通过管道符来指定文件,不存在时创建文件
    • p3:文件创建时候的权限级别,在0-7之间,常用参数为6
f, err := os.OpenFile("gotest.txt", os.O_APPEND | os.O_RDWR, os.ModeAppend)
f.Close()
复制代码

常用的文件打开模式:

O_RDONLY 	int = syscall.O_RDONLY		// 只读
O_WRONGLY	int = syscall.O_WRONGLY		// 只写
O_RDWR 		int = syscall.O_RDWR		// 读写
O_APPEND 	int = syscall.O_APPEND		// 写操作时将数据追加到文件末尾
O_CREATE 	int = syscall.O_CREATE		// 如果不存在则创建一个新文件
O_EXCL 		int = syscall.O_EXCL		// 打开文件用于同步I/O
O_TRUNC		int = syscall.O_TRUNC		// 如果可能,打开时清空文件
复制代码

2、文件写操作

写入字节 Write()

// 写入文件内容
n, err := f.Write([]byte("hello"))
fmt.Println("write number = ", n)
复制代码

按字符串写 WriteString()

// 写入文件内容
n, err := f.WriteString(["hello")		// 会将前5个字符替换为 hello
fmt.Println("write number = ", n)
复制代码

修改文件的读写指针位置 Seek(),包含两个参数:

  • 参数1:偏移量,为正数时向文件尾偏移,为负数时向文件头偏移
  • 参数2:偏移的开始位置,包括:
    • io.SeekStart:从文件起始位置开始
    • io.SeekCurrent:从文件当前位置开始
    • io.SeekEnd:从文件末尾位置开始

Seek()函数返回

f, _ := os.OpenFile("test.txt",os.O_RDWR, 6)
off, _ := f.Seek(5, io.SeekStart)
fmt.Println(off)			      // 5
n, _ := f.WriteAt([]byte("111"), off)
f.Close()
复制代码

3、文件操作示例

// 路径操作
fmt.Println(filepath.IsAbs("./test.txt"))	// false:判断是否是绝对路径
fmt.Println(filepath.Abs("./test.txt"))		// 转换为绝对路径

// 创建目录
err := os.Mkdir("./test", os.ModePerm)

// 创建多级目录
err = os.MkdirAll("./dd/rr", os.ModePerm)
复制代码

Openfile()可用于打开目录。

删除文件

err := os.Remove("test.txt")
复制代码

直接调用os工具包 Remove() 移除文件

掘金(JUEJIN)  一起分享知识,Keep Learning!

猜你喜欢

转载自juejin.im/post/7132121471282839583