Golang 基础之文件操作

435 阅读2分钟

针对文件的增删改查操作,梳理出4种处理方式。 注意,Golang至少1.16以上版本。

文件处理 (os 库)

写操作

函数原型

func WriteFile(name string, data []byte, perm FileMode) error

主要作用:写入文件内容,如果文件不存在则创建文件。 FileMode 参数可以指定权限列如 0755 支持八进制格式。

使用案例

func write() {
	err := os.WriteFile("data1.txt", []byte("Test data..."), 0755)
	if err != nil {
		panic(err)
	}
}

追加操作

函数原型

func OpenFile(name string, flag int, perm FileMode) (*File, error)

主要作用:写入文件内容,如果文件不存在则创建文件。 flag 参数可以指定权文件打开模式如O_APPENDO_CREATEO_WRONLY

使用案例

func append() {
    f, err := os.OpenFile("data1.txt", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0755)
    if err != nil {
        panic(err)
    }
    if _, err := f.Write([]byte("append some data\n")); err != nil {
        panic(err)
    }
}

使用内置函数 Write 追加写入到文件

读操作

函数原型

func ReadFile(name string) ([]byte, error)

主要作用:读取文件内容,传入字符串

使用案例

func read() {
    data, err := os.ReadFile("data1.txt")
    if err != nil {
        panic(err)
    }
    os.Stdout.Write(data)
}

删除操作

函数原型

func Remove(name string) error

使用案例

func remove() {
    err := os.Remove("data1.txt")
    if err != nil {
        panic(err)
    }
}

使用 os 库进行操作文件处理, 可以实现对文件增删改查。

文件处理 (io 库)

写,追加操作

需要借助 os.OpenFile() 函数打开文件模式,使用io.WriteString函数写入。

函数原型

func WriteString(w Writer, s string) (n int, err error)

使用案例

func append() {
    f, err := os.OpenFile("data.txt", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0755)
    if err != nil {
        panic(err)
    }
    _, err1 := io.WriteString(f, "io test data...")
    if err1 != nil {
        panic(err1)
    }
}

文件处理 (ioutil 库)

读操作

函数原型

func ReadFile(filename string) ([]byte, error)

使用案例

func read() {
    content, err := ioutil.ReadFile("data.txt")
    if err != nil {
        panic(err)
    }
    fmt.Printf("%s",content)
}

写操作

函数原型

// 写入[]byte类型的data到filename文件中,文件权限为perm
func WriteFile(filename string, data []byte, perm fs.FileMode) error

使用案例

func write() {
    err := ioutil.WriteFile("data.txt", []byte("ioutil test data...\n"), 0755)
    if err != nil {
        panic(err)
    }
}

文件处理 (bufio 库)

写操作

函数原型

func NewWriter(w io.Writer) *Writer

其中w io.Writer参数,需要传入文件的指针可以通过os.OpenFile() 打开文件模式, 然后通过NewWriter调用内置函数 WriteString(s string) 写入字符串完成。

使用案例

func create() {
    f, err := os.OpenFile("data.txt", os.O_RDWR|os.O_CREATE, 0755)
    if err != nil {
        panic(err)
    }
    w := bufio.NewWriter(f)
    w.WriteString("bufio test data...\n")
    w.Flush()
}

读操作

函数原型

func NewReader(rd io.Reader) *Reader

其中rd io.Reader参数,和写操作步骤可参考一样。

使用案例

func read() {
    f, err := os.Open("data.txt")
    if err != nil {
        panic(err)
    }
    defer f.Close()
    r := bufio.NewReader(f)
    // 使用ReadString(delim byte)来读取delim以及之前的数据并返回相关的字符串
    if content, err1 := r.ReadString(byte('b')); err1 == nil {
        fmt.Println(content);
    }
    // 注意:上述ReadString已经将buffer中的数据读取出来了,下面将不会输出内容
    // 需要注意的是,因为是将文件内容读取到[]byte中,因此需要对大小进行一定的把控
    // 读取Reader对象中的内容到[]byte类型的buf中
    buf := make([]byte, 1024)
    if _, err := r.Read(buf); err == nil {
        fmt.Println(string(buf))
    }
}

其中os.Open() 打开一个文件并返回一个文件对象