Go语言文件操作

Python013

Go语言文件操作,第1张

本文主要介绍了Go语言中文件读写的相关操作。

文件是什么?

计算机中的文件是存储在外部介质(通常是磁盘)上的数据集合,文件分为文本文件和二进制文件。

os.Open() 函数能够打开一个文件,返回一个 *File 和一个 err 。对得到的文件实例调用 close() 方法能够关闭文件。

为了防止文件忘记关闭,我们通常使用defer注册文件关闭语句。

Read方法定义如下:

它接收一个字节切片,返回读取的字节数和可能的具体错误,读到文件末尾时会返回 0 和 io.EOF 。 举个例子:

使用for循环读取文件中的所有数据。

bufio是在file的基础上封装了一层API,支持更多的功能。

io/ioutil 包的 ReadFile 方法能够读取完整的文件,只需要将文件名作为参数传入。

os.OpenFile() 函数能够以指定模式打开文件,从而实现文件写入相关功能。

其中:

name :要打开的文件名 flag :打开文件的模式。 模式有以下几种:

perm :文件权限,一个八进制数。r(读)04,w(写)02,x(执行)01。

go语言有支持正则表达式后向引用的方法,方法如下

package main

import (

"fmt"

"os"

"path/filepath"

"regexp"

)

func main() {

// 命令行参数

args := os.Args

// 检查参数

if len(args) == 1 {

fmt.Println("ff is a file find tool. use like bottom")

fmt.Println("ff [dir] [regexp]")

return

}

if len(args) <3 {

fmt.Println("args <3")

return

}

fileName := args[1]

pattern := args[2]

file, err := os.Open(fileName)

if err != nil {

fmt.Println(err)

return

}

fi, err := file.Stat()

if err != nil {

fmt.Println(err)

return

}

if !fi.IsDir() {

fmt.Println(fileName, " is not a dir")

}

reg, err := regexp.Compile(pattern)

if err != nil {

fmt.Println(err)

return

}

// 遍历目录

filepath.Walk(fileName,

func(path string, f os.FileInfo, err error) error {

if err != nil {

fmt.Println(err)

return err

}

if f.IsDir() {

return nil

}

// 匹配目录

matched := reg.MatchString(f.Name())

if matched {

fmt.Println(path)

}

return nil

})

}