golang文件读写教程

缓冲区方式

使用bufio缓冲读写文件,通过工厂模式获取对应结构体。
在创建的时候,读取文件内容。提供添加和覆盖两种修改文件的方式。

package utils

import (
	"bufio"
	"fmt"
	"io"
	"os"
)

type fileOperator struct {
	path string
	data string
}

func (f *fileOperator) GetData() string {
	return f.data
}

func (f *fileOperator) GetPath() string {
	return f.path
}

func (f *fileOperator) write(content string, op int) {
	var file, err = os.OpenFile(f.path, op, 0666)
	if err != nil {
		fmt.Printf("write file err: %v \n", err)
		return
	}
	defer file.Close()
	var writer = bufio.NewWriter(file)
	writer.WriteString(content)
	//writer有缓冲区,所以退出时必须使用Flush将缓冲区数据写入到文件
	writer.Flush()
}

func (f *fileOperator) CoverContent(content string) {
	f.data = content
	// 直接覆盖文件
	f.write(content, os.O_WRONLY|os.O_TRUNC)
}

func (f *fileOperator) AddContent(content string) {
	f.data += content
	// 在文件后面添加
	f.write(content, os.O_WRONLY|os.O_APPEND)
}

// init
func FileOperator(path string) *fileOperator {
	var obj = fileOperator{
		path: path,
		data: "",
	}

	// 如果文件不存在,则根据路径创建文件
	if _, err := os.Stat(path); err != nil {
		_, err = os.Create(path)
		if err != nil {
			fmt.Printf("file create error: %v\n", err)
		}
	}
	// 获取文件对象
	var file, err = os.OpenFile(path, os.O_RDONLY, 0)
	if err != nil {
		fmt.Printf("file init err: %v\n", err)
		return nil
	}
	defer file.Close()
	// 读取文件数据
	var reader = bufio.NewReader(file)
	for {
		var line, err = reader.ReadString('\n')
		if err != nil {
			if err == io.EOF {
				if len(line) > 0 {
					obj.data += line
				}
			}
			break
		} else {
			obj.data += line
		}
	}
	return &obj
}

调用方式如下

package main

import (
	"learnGo/utils"
)

func main() {

	var content = "abc\n"
	for i := 0; i < 2; i++ {
		content += content
	}
	var htmlData = utils.FileOperator("./data/data.txt")
	htmlData.CoverContent(content)

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值