Go: 对文件的操作(关于os包的读、写函数)

在Go语言中的os.File中,封装了所有的对于文件的相关操作,File是个结构体。

Go: 对文件的操作(关于os包的读、写函数)

 

package  main
import (
	"fmt"
	"bufio"
	"os"
	"io"
)
func main() {
	//创建一个新文件
	//1、打开文件 c:/src/go_code/test_project/gotest.txt
	filePath := "c:/src/go_code/test_project/gotest.txt"
    /*
    func OpenFile(name string, flag int, perm FileMode) (file *File, err error)
    参数1:文件路径
    参数2:打开方式,这里选择了可读写 | 清空原文件内容,
    参数3: 文件的权限为777,这个只在linux/unix有作用,在windows中无效
    */
	file,err := os.OpenFile(filePath,os.O_RDWR | os.O_TRUNC, 777)
	if err != nil {
		fmt.Printf("open file error =%v",err)
		return 
	}
	//及时关闭file句柄
	defer file.Close() //读取完毕后关闭文件,否则内存会溢出
	//准备写入5句“2022年是虎年”
	str := "2022年是虎年\n\r"// \n表示换行 \r表示可以用记事本也能打开正确的格式
	//写入时,使用带缓存的 *writer
	writer := bufio.NewWriter(file)
	for i := 0; i < 7; i ++ {
		writer.WriteString(str)
	} 

    /*
	因为writer是带缓存,因此在调用writerString方法时,其实内容是先写入到缓存中的,所以需要
    调用Flush()方法,将缓冲的数据真正写入到文件中,否则文件中会没有数据 !!!
    */
	writer.Flush()

	//读取文件
	file,err = os.Open(filePath)
	if err != nil {
		fmt.Println("open file err=", err)
	}
	defer file.Close()
	reader := bufio.NewReader(file)//按每行读取
	for {
		str, err := reader.ReadString('\n')//每行读到行尾就结束
		if err == io.EOF { //读到末尾结束
			break
		} 
		fmt.Println(str)
	}
	fmt.Println("文件读取结束...")
}

上一篇:【TcaplusDB知识库】TDR表GOSDK示例代码-查询数据


下一篇:SRS流媒体服务器——源码分析——基本流程简单分析