Go - 35 Go 文件操作
基本介绍
文件对我们并不陌生,文件是数据源(保存数据的地方)的一种,比如大家经常使用的word文档,txt文件,excel文件...都是文件。文件最主要的作用就是保存数据,它既可以保存一张图片,也可以保存视频,声音...
文件在程序中是以流的形式来操作的;
流:数据在数据源(文件) 和程序(内存)之间经历的路径;
输入流(读文件):数据从数据源(文件)到程序(内存)的路径;
输出流(写文件):数据从程序(内存)到数据源(文件)的路径;
主要是os包里的File的结构体来对文件进行操作; File代表一个打开的文件对象。
常用的文件操作函数和方法
打开一个文件进行读操作;
os.Open(name string) (*File, error)
关闭一个文件:
File.Close()
小小的demo
// 通过os 打开一个文件
// file 的叫法:file对象, file指针, file 文件句柄
file, error := os.Open("e:/text01.txt")
if error != nil {
fmt.Println("open file error=", error)
}
// 输出下文件,看看文件是什么? 文件就是指针 *File
fmt.Printf("file==%v", file) // file==&{0xc000080780}
// 关闭文件
error = file.Close()
if error != nil {
fmt.Println("close file error=", error)
}
写文件操作应用实例
func OpenFile(name string, flag int, perm FileMode) (file *File, err error)
说明:os.OpenFile 是一个更一般性的文件打开函数,它会使用指定的选项(如O_RDONLY等),指定的模式(如0666等)打开指定名称的文件。如果操作成功,返回的文件对象可用于I/O。如果出错,错误底层类型就是 *PathError.
第二个参数:文件打开模式(可以组合);
第三个参数:权限控制(linux/unix下使用)
r --> 4
w --> 2
x --> 1
实际案例:
// 创建一个新文件,写入内容 5句 "hello, Gardon"
// 1.打开文件 e:/abc_w.txt
filePath := "e:/abc_w.txt"
file, err := os.OpenFile(filePath, os.O_WRONLY | os.O_CREATE, 0666)
if err != nil {
fmt.Println("open fiel err=", err)
return
}
// 及时关闭file句柄
defer file.Close()
// 准备写入内容
str := "hello, Gardon\n"
// 写入时,使用带缓存的 *Writer
writer := bufio.NewWriter(file)
for i:=0; i < 5; i ++ {
writer.WriteString(str)
}
// 因为writer是带缓存,因此在调用WriteString方法时,其实
// 内存是先写入到缓存的,所以需要调用Flush方法,将缓存的数据
// 真正写入到文件中,否则文件中会没有数据
writer.Flush()
判断文件是否存在
golang判断文件或者文件夹是否存在的方法使用os.Stat() 函数返回的错误值进行判断:
1.如果返回的错误为nil,说明文件或者文件夹存在
2.如果返回的错误类型使用os.IsNotExist() 判断为true,说明文件或者文件夹不存在
3.如果返回的错误为其他类型,则不确定是否存在
实现的功能函数:
func PathExists(filePath string) (bool, error) {
_, err := os.Stat(filePath)
if err == nil { // 为空说明存在
return true, nil
}
if os.IsNotExist(err) { // 不存在 返回 false
return false, nil
}
return false, err
}