当前位置:网站首页> 一文搞懂Go语言中文件的读写与创建
一文搞懂Go语言中文件的读写与创建
2022-07-04 18:39:00 【1024问】
1. 文件的打开与关闭
1.1 os.open
1.2 os.OpenFile() 指定模式打开文件
2. 文件的读取
2.1 打开文件的方式读取文件中的数据
2.2 使用 bufio 整行读取文件
3. 写入文件操作
3.1 file.Write 与 file.WriteString
3.2 bufio.NewWriter
3.3 ioUtil 工具类
1. 文件的打开与关闭1.1 os.openos.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("文件打开出现异常")}// 封装为 bufioreader := 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语言 文件读写 创建内容请搜索软件开发网以前的文章或继续浏览下面的相关文章希望大家以后多多支持软件开发网!
边栏推荐
- 六石编程学:关于代码,有六个得意
- What are the consequences of closing the read / write channel?
- Explicit random number
- kotlin 基本使用
- 2022 version of stronger jsonpath compatibility and performance test (snack3, fastjson2, jayway.jsonpath)
- Pytoch learning (4)
- 泰山OFFICE技术讲座:关于背景(底纹和高亮)的顺序问题
- 软件客户端数字签名一定要申请代码签名证书吗?
- Online data migration scheme encountered in the project 1 - general idea sorting and technical sorting
- Kotlin classes and objects
猜你喜欢
B2B mall system development of electronic components: an example of enabling enterprises to build standardized purchase, sale and inventory processes
Niuke Xiaobai month race 7 who is the divine Archer
BCG 使用之CBCGPTabWnd控件(相当于MFC TabControl)
Dark horse programmer - software testing - stage 08 2-linux and database-23-30-process port related, modify file permissions, obtain port number information, program and process related operations, Li
92. (cesium chapter) cesium building layering
c# .net mvc 使用百度Ueditor富文本框上传文件(图片,视频等)
Dark horse programmer - software testing - 09 stage 2-linux and database -31-43 instructions issued by modifying the file permission letter, - find the link to modify the file, find the file command,
Pointnet / pointnet++ point cloud data set processing and training
Chrome开发工具:VMxxx文件是什么鬼
Wireshark network packet capture
随机推荐
How is the entered query SQL statement executed?
Employment prospects and current situation of Internet of things application technology
Ziguang zhanrui completed the first 5g R17 IOT NTN satellite on the Internet of things in the world
Offset function and windowing function
Lingyun going to sea | Wenhua online & Huawei cloud: creating a new solution for smart teaching in Africa
Matrix flip (array simulation)
需求开发思考
English grammar_ Noun - use
黑马程序员-软件测试--08阶段2-linux和数据库-23-30-进程端口相关,修改文件权限,端口号信息的获取,程序和进程相关操作,linux命令案例
Huawei Nova 10 series supports the application security detection function to build a strong mobile security firewall
Kotlin basic data type
c# . Net MVC uses Baidu ueditor rich text box to upload files (pictures, videos, etc.)
做社交媒体营销应该注意些什么?Shopline卖家的成功秘笈在这里!
公司要上监控,Zabbix 和 Prometheus 怎么选?这么选准没错!
复杂因子计算优化案例:深度不平衡、买卖压力指标、波动率计算
Kotlin inheritance
应用实践 | 蜀海供应链基于 Apache Doris 的数据中台建设
1003 emergency (25 points) (PAT class a)
Creation of JVM family objects
水晶光电:长安深蓝SL03的AR-HUD产品由公司供应