您现在的位置是:网站首页> 编程资料编程资料
一文搞懂Go语言中文件的读写与创建_Golang_
2023-05-26
385人已围观
简介 一文搞懂Go语言中文件的读写与创建_Golang_
1. 文件的打开与关闭
1.1 os.open
os.open 函数能打开一个文件 调用 close() 方法 关闭文件
//打开文件 open, err := os.Open("./1.text") if err != nil { //打印异常信息 fmt.Println("open file err", err) } fmt.Println("文件获取完毕") //没有出现异常,关闭文件 open.Close() 为了防止忘记关闭文件,通常都将关闭文件的代码写在 defer中
//打开文件 open, err := os.Open("./1.text") defer func() { if open != nil { // 关闭文件 open.Close() } }() if err != nil { //打印异常信息 fmt.Println("open file err", err) } fmt.Println("文件获取完毕") 1.2 os.OpenFile() 指定模式打开文件
func OpenFile(name string, flag int, perm FileMode) (*File, error) { ... } 其中:
name:要打开的文件名 flag:打开文件的模式。 模式有以下几种:
| 模式 | 含义 |
|---|---|
| os.O_WRONLY | 只写 |
| os.O_CREATE | 创建文件 |
| os.O_RDONLY | 只读 |
| os.O_RDWR | 读写 |
| os.O_TRUNC | 清空 |
| os.O_APPEND | 追加 |
perm:文件权限,一个八进制数。r(读)04,w(写)02,x(执行)01。
2. 文件的读取
2.1 打开文件的方式读取文件中的数据
//首先需要打开一个文件 open, err := os.Open("./1.text") defer func() { e := recover() if e != nil { fmt.Println("打开文件出现了异常", e) } }() if err != nil { // 如果有异常 没必要往下走了 抛出 panic(err) } //如果没有异常 //创建 字节切片 bytes := make([]byte, 1024) defer func() { e := recover() if e != nil { fmt.Println("读取文件出现了异常", e) } }() for { //循环读 _, err := open.Read(bytes) if err != nil { panic(err) } //打印结果 fmt.Println(string(bytes)) } 2.2 使用 bufio 整行读取文件
bufio 是在file的基础上封装了一层API , 支持更多的功能
//同样的首先打开一个文件 file, err := os.Open("./1.text") defer recover() if err != nil { panic("文件打开出现异常") } // 封装为 bufio reader := bufio.NewReader(file) defer recover() for { //读到指定字符串换一行 line, _, err := reader.ReadLine() if err != nil { if err == io.EOF { fmt.Println("文件读写完毕") break } panic("文件读取出现异常") } fmt.Println(string(line)) } fmt.Println("程序运行结束") func main() { file, err := os.OpenFile("xx.txt", os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0666) } 3. 写入文件操作
无论是文件读取还是文件写入 都是需要先打开文件 再进行操作
3.1 file.Write 与 file.WriteString
// 首先打开文件 O_RDWR 读写权限 O_TRUNC 清空文件 0 开头表示八进制 666表示 当用用户 当前组 其他用户 都是可读可写权限 file, err := os.OpenFile("1.text", os.O_RDWR|os.O_TRUNC, 0666) if err != nil { fmt.Printf("打开文件出现异常 %v", err) } defer file.Close() // 返回 写入的字节数 write, err := file.Write([]byte("测试文件写入 \n")) file.WriteString("一次写入整个字符串") if err != nil { fmt.Println(err) } fmt.Println(write) 3.2 bufio.NewWriter
// 基于缓存操作 file, err := os.OpenFile("2.text", os.O_CREATE|os.O_WRONLY|os.O_TRUNC, 0666) if err != nil { panic(err) } defer func() { file.Close() if e := recover(); e != nil { fmt.Printf("异常 : 打开文件出现异常 %v", e) } }() // 使用 bufio 基于缓存操作io流 // 需要传入 一个 io 接口包下的 Writer 接口实现类 而 file 实现了该 方法 writer := bufio.NewWriter(file) writer.WriteString(" 写入缓存字符串内容 2") //需要将缓存中的数据刷新到硬盘上 writer.Flush() 
3.3 ioUtil 工具类
// 使用工具类 打开文件,写入文件一气呵成 err := ioutil.WriteFile("3.text", []byte("工具类写入内容"), 0666) if err != nil { fmt.Println("程序运行出现异常", err) } 到此这篇关于一文搞懂Go语言中文件的读写与创建的文章就介绍到这了,更多相关Go语言 文件读写 创建内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
您可能感兴趣的文章:
相关内容
- 基于微服务框架go-micro开发gRPC应用程序_Golang_
- Go实现整合Logrus实现日志打印_Golang_
- go-micro开发RPC服务以及运行原理介绍_Golang_
- 一篇文章搞懂Go语言中的Context_Golang_
- 一篇文章学会GO语言中的变量_Golang_
- Golang实现快速求幂的方法详解_Golang_
- 详解golang执行Linux shell命令完整场景下的使用方法_Golang_
- 详解Go语言中for循环,break和continue的使用_Golang_
- GoFrame实现顺序性校验示例详解_Golang_
- 优雅使用GoFrame共享变量Context示例详解_Golang_
