Golang文件操作

1.文件介绍:文件是数据源,主要作用是保存数据

2.文件在程序中是以流的形式来操作的

 对文件的操作主要用File(os包)结构体来实现

 文件的基本操作

1)打开一个文件进行读操作:

os.Open(name string)(*File,error)

2)关闭一个文件

File.close()

案例:使用的函数和方法

func main(){//打开文件//概念说明:file的叫法//1.file叫file对象//2.file叫file指针//3.file叫file文件句柄file, err := os.Open("d:/text.txt")if err != nil {fmt.Println("oprn filr err=",err)    }//输出下文件,可以看出文件就是个指针 fmt.Printf("file=%v",file)//关闭文件err = file.close()if err != nil{fmt.Println("close file err=",err)    }}

 读文件操作应用实例

1)读取文件的内容并显示在终端(带缓冲区的方式),使用os.Open,file.Close, bufio.NewReader(),reader.ReadString函数和方法
func main(){//打开文件//概念说明:file的叫法//1.file叫file对象//2.file叫file指针//3.file叫file文件句柄file, err := os.Open("d:/text.txt")if err != nil {fmt.Println("oprn filr err=",err)    }//当函数退出时,请及时的关闭filedefer file.Close()//要及时关闭file句柄,否则会有内存泄漏//创建一个*Reader,是指针类型带缓冲的/*const(defaultBufSize=4096)默认缓冲的缓存区为4096字节*///有缓冲在读取文件的时候不是一次性把文件读入内存而是读一部分处理一部分,可以处理较大的文件reader := bufio.NewReader(file)//循环读取文件的内容for {str, err := reader.ReadString('\n')//读到一个换行就结束   ,将读取的内容存入strif err == io.EOF {//io.EOF表示文件的末尾break} //输出内容fmt.Print(str)}fmt.Println("文件读取结束")
}
2)读取文件内容并显示在终端(使用ioutil一次将整个文件读入内存中),这种方式适用于文件不大的情况,相关方法和函数(ioutil.ReadFile)

func main(){//这是使用ioutil.ReandFile一次性将文件读取到位file := "d:/text.txt"content,err := ioutil.ReadFile(file)if err != nil{fmt.Print("read file err=%v",err)  }//把读取到的内容显示到终端fmt.Printf("%v",content)//[]byte,输出的全是数字fmt.Printf("%v",string(content))//转成string
}//这个方法并没有打开所以不用关闭。打开和关闭文件都被隐藏在ReadFile这个方法里

 写文件操作应用实例

基本介绍-os.OpenFile函数

基本应用实例:方式一 注意写的时候用的是带缓存的Writer

 (1)创建一个新文件,写入内容5句"hello,Gardon"
 func main(){//创建一个新文件,写入内容5句“hello,Gardon”//1.打开文件 filePath := "d:/abc.txt"file, err := os.OpenFile(filePath, os.O_WRONLY | os.O_CREATE, 0666)//0666在windows下面没有作用if err != nil{fmt.Printf("open file err=%v\n",err)return     }//关闭文件defer file.Close() //准备写入五句话“hello,Gardon”str := "Hello, Gardon\n" //写入时,使用带缓存的 *Writerwriter := bufio.NewWriter(file)for i := 0;i < 5;i++{writer.WriteString(str)}//因为writer是带缓存,因此在调用这个writerString方法时,其实内容是先写入到缓存的//所以需要调用Flush方法,将缓冲的数据真正写入文件中,否则文件中会丢失数据!!!!writer.Flush()}
 (2)打开一个已经存在的文件中,将原来的内容覆盖成新的内容10句”你好,尚硅谷!“
func main(){//打开一个已经存在的文件中,将原来的内容覆盖成新的内容10句“你好,尚硅谷!”//1.打开一个已经存在的文件filePath := "d:/abc.txt"file, err := os.OpenFile(filePath, os.O_WRONLY | os.O_TRUNC, 0666)//0666在windows下面没有作用if err != nil{fmt.Printf("open file err=%v\n",err)return     }//关闭文件defer file.Close() //准备写入五句话“hello,Gardon”str := "你好,尚硅谷!\r\n"  //写入时,使用带缓存的 *Writerwriter := bufio.NewWriter(file)for i := 0;i < 10;i++{writer.WriteString(str)}//因为writer是带缓存,因此在调用这个writerString方法时,其实内容是先写入到缓存的//所以需要调用Flush方法,将缓冲的数据真正写入文件中,否则文件中会丢失数据!!!!writer.Flush()
}
(3)打开一个已经存在的文件,在原先的内容上追加内容‘ABC!ENGLISH!’
func main(){//打开一个已经存在的文件,在原先的内容上追加内容'ABC! ENGLISH!'//1.打开文件已经存在的文件filePath := "d:/abc.txt"file, err := os.OpenFile(filePath, os.O_WRONLY | os.O_APPEND, 0666)//0666在windows下面没有作用if err != nil{fmt.Printf("open file err=%v\n",err)return     } //关闭文件句柄defer file.Close() //准备写入五句话“hello,Gardon”str := "ABC,ENGLISH\r\n"  //写入时,使用带缓存的 *Writerwriter := bufio.NewWriter(file)for i := 0;i < 10;i++{writer.WriteString(str)}//因为writer是带缓存,因此在调用这个writerString方法时,其实内容是先写入到缓存的//所以需要调用Flush方法,将缓冲的数据真正写入文件中,否则文件中会丢失数据!!!!writer.Flush()
}
(4)打开一个存在的文件,将原来的内容读出显示在终端,并且追加5句”hello,北京!“
func main(){////1.打开文件已经存在的文件filePath := "d:/abc.txt"file, err := os.OpenFile(filePath, os.RDWR | os.O_APPEND, 0666)//0666在windows下面没有作用if err != nil{fmt.Printf("open file err=%v\n",err)return     } //及时关闭文件句柄defer file.close()//先读取原来文件的内容并显示在终端reader := bufio.NewReader(file)for{str, err := reader.ReadString('\n')   //每读到一个换行符就代表是一行if err == io.EOF{//如果到文件末尾就结束break         }//显示到终端fmt.Print(str)                }//追加五句“hello,北京”str := "hello,北京\r\n"//写入时,使用带缓存的 *Writerwriter := bufio.NewWriter(file)for i := 0;i < 10;i++{writer.WriteString(str)}//因为writer是带缓存,因此在调用这个writerString方法时,其实内容是先写入到缓存的//所以需要调用Flush方法,将缓冲的数据真正写入文件中,否则文件中会丢失数据!!!!writer.Flush()
}

基本应用实例-方式二

package main
import ("fmt""io/ioutil"
)func main(){//将d:/abc.txt文件内容导入到 e:/kkk.txt//1.首先将d:/abc.txt内容读取到内存//2.将读取到的内容写入e:/kkk.txtfile1Path := "d:/abc.txt"file2Path := "e:/kkk.txt"data, err := ioutil.ReadFile(file1Path)if err != nil{//说明读取文件有错误fmt.Printf("read file err=%v",err)return}err = ioutil.WriteFile(file2Path,data,0666)if err != nil{fmt.Printf("write file err=%v",err)}
}

 

拷贝文件 

注意:Copy函数是io包提供的(文件拷贝最好是同类型否则容易乱码)

//自己编写一个函数,接收两个文件路径 srcFileName dstFileName
func CopyFile(dstFileName string,srcFileName string)(written int64,err error){srcFile,err := os.Open(srcFileName)//返回一个文件句柄if err != nil {fmt.Printf("open file err=%v\n",err)   }defer srcFile.Close()//通过srcfile,获取到Reader reader := bufio.NewReader(srcFile)//打开dstFileName(因为这个文件可能不存在需要创建,所以不能用open打开)dstFile, err := os.OpenFile(dstFileName, os.O_WRONLY | os.O_CREATE, 0666)//0666在windows下面没有作用if err != nil{fmt.Printf("open file err=%v\n",err)return     }//通过dstFile,获取到 Writerwriter := bufio.NewWriter(dstFile)defer dstFile.Close()return io.Copy(writer,reader)
}
func main(){//将d:/flower.jpg 文件拷贝到 e:/abc.jPg//1.调用CopyFile 完成文件拷贝srcFile := "d:/flower.jpg"dstFile := "e:/abc.jpg"_, err := CopyFile(dstFile,srcFile)if err == nil{fmt.Printf("拷贝完成\n")  }else{fmt.P/rintf("拷贝完成 err=%v\n",err)    }}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/463676.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WebSocket的理解与应用

WebSocket的理解与应用 一、是什么二、特点1、全双工2、二进制帧3、协议名4、握手5、优点 三、应用场景 一、是什么 WebSocket&#xff0c;是一种网络传输协议&#xff0c;位于OSI模型的应用层。可在单个TCP连接上进行全双工通信&#xff0c;能更好的节省服务器资源和带宽并达…

【补题/atccoder】Toyota Programming Contest 2024#7(AtCoder Beginner Contest 362)

A、买笔 思路&#xff1a; 输入红绿蓝三只笔价格&#xff0c;再输入不喜欢颜色&#xff0c; 输出除不喜欢颜色笔以外最低价格 代码如下&#xff1a; #include <iostream> #include <algorithm> using namespace std;int main() {int r, g, b;cin >> r >&…

【含开题报告+文档+源码】基于Web的房地产销售网站的设计与实现

开题报告 随着经济的发展和城市化进程的加速&#xff0c;房地产市场逐渐成为人们关注的焦点。然而&#xff0c;传统的房地产销售模式存在很多问题&#xff0c;如信息不透明、交易过程繁琐、无法满足个性化需求等。这些问题不仅影响了消费者的购房体验&#xff0c;也制约了房地…

网络层3——IP数据报转发的过程

目录 一、基于终点的转发 1、理解 2、IP数据报转发过程 二、最长前缀匹配 1、理解 2、主机路由 3、默认路由 三、二叉线索查找 一、基于终点的转发 1、理解 理解什么叫终点转发 IP数据报的传递&#xff0c;交给路由器后 可不可以做到直接发送给目的主机呢&#xff1f;…

【LwIP源码学习4】主线程tcpip_thread

前言 本文对lwip的主要线程tcpip_thread进行分析。 正文 tcpip_thread是lwip最主要的线程&#xff0c;其创建在tcpip_init函数中 sys_thread_new(TCPIP_THREAD_NAME, tcpip_thread, NULL, TCPIP_THREAD_STACKSIZE, TCPIP_THREAD_PRIO);tcpip_init函数被TCPIP_Init函数调用。…

前端的导入导出「CommonJS」「ES Module」模块化规范

模块化开发有助于我们将代码进行拆分&#xff0c;便于开发和维护&#xff0c;但如果不清楚模块化规范&#xff0c;就会在开发时不知道该用 require 还是 import&#xff0c;导出时该用 export 还是 module.exports 参考博主文章

CoEdge: 面向自动驾驶的协作式边缘计算系统,实现分布式实时深度学习任务的高效调度与资源优化

文章导读 CoEdge系统的构思基于边缘计算的发展&#xff0c;这一分布式计算范式将服务从云端推向网络边缘&#xff0c;以支持各种物联网应用&#xff0c;如智能交通和自动驾驶。随着通信技术的进步&#xff0c;出现了新的协作边缘系统&#xff0c;多个边缘节点可以通过本地点对…

操作系统进程的描述与控制知识点

前趋图和程序执行 前趋图 定义&#xff1a; 前趋图是指一个有向无循环图&#xff0c;可记为 DAG&#xff0c;它用于描述进程之间执行的先后顺序图形表示&#xff1a; 程序的执行 程序顺序执行时&#xff0c;系统资源的利用率很低 程序顺序执行时的特征 顺序性封闭性可再现性 …

移远通信推出八款天线新品,覆盖5G、4G、Wi-Fi和LoRa领域

近日&#xff0c;全球领先的物联网整体解决方案供应商移远通信宣布&#xff0c;再次推出八款高性能天线新品&#xff0c;进一步丰富其天线产品阵容&#xff0c;更好地满足全球客户对高品质天线的更多需求。具体包括5G超宽带天线YECT005W1A和YECT004W1A、5G天线YECT028W1A、4G天…

k8s简单的指令以及图解

k8s简单的操作指令 1.kubectl get pods 查看全部的pods 也就是k8s中的最小颗粒度 2.kubectl describe podsname 查看pod的详情 3.kubectl get pods -n podsname 查看pod服务是否正常 4.kubectl logs -f 容器name --tail1000 -n podname 查看pod 的日志 5.kubectl get service …

Python复习1:

一、数据类型 1.数字&#xff1a;int、float、bool 2.字符串&#xff1a;string 3.列表&#xff1a;list 4.集合&#xff1a;set 5.字典&#xff1a;dictionary 二、Test 1.print输出固定格式 num110 str1"hello world" #输出的固定格式 print("num1%d&…

UVM验证该去大公司还是中型公司呢?

无论是UVM验证还是系统C验证亦或是其它&#xff0c;大公司的普遍特点是做过多层封装、已经准备好轮子、各式各样的工具库。如果一毕业就进大公司&#xff0c;那你会在UVM等基础之上再学习公司封装的那部分工具、脚本或者是库&#xff0c;一旦掌握以后你接下来将会脱离一些初级的…

法律文件智能识别:免费OCR平台优化数字化管理

一、系统概述 在法律行业&#xff0c;纸质文件的数字化需求日益迫切&#xff0c;合同、判决书、协议等文件的管理成为法律部门的一大难题。传统手动输入不仅耗时&#xff0c;且易出错。思通数科的OCR识别平台应运而生&#xff0c;以其开源、免费的特性为法律文档管理提供了智能…

koa + sequelize做距离计算(MySql篇)

1.核心思路 1.利用sequelize的fn方法调用MySql原生函数&#xff08;st_distance_sphere、point&#xff09; 2.这里利用到了MySql的原生函数&#xff0c;不懂可以去看看mysql的函数知识 2.核心代码 //st_distance_sphere、point函数用来计算当前经纬度和目的地经纬度 //col…

小程序分包看完这一篇秒懂

前言 在小程序开发中&#xff0c;分包是一种优化加载时间和用户体验的方法。通过将小程序拆分成多个包&#xff0c;可以按需加载&#xff0c;从而减少首次加载时间。很多刚涉及小程序开发的小伙伴对小程序分包都相对茫然或者头疼。也不知道该合适进行分包&#xff0c;怎么进行…

第02章 MySQL环境搭建

一、MySQL的卸载 如果安装mysql时出现问题&#xff0c;则需要将mysql卸载干净再重新安装。如果卸载不干净&#xff0c;仍然会报错安装不成功。 步骤1&#xff1a;停止MySQL服务 在卸载之前&#xff0c;先停止MySQL8.0的服务。按键盘上的“Ctrl Alt Delete”组合键&#xff0…

1.探索WebSocket:实时网络的心跳!

序言 你可能听说过"WebSokcet"这个词&#xff0c;感觉它好像很高深&#xff0c;但其实它是一个超级酷的小工具&#xff0c;让我们在Web应用里实现实时通信。想象一下&#xff0c;你可以像聊天一样&#xff0c;在浏览器和服务器之间来回“畅聊“&#xff0c;没有延迟…

Qt6 CMake 中引入 Qt Linguist 翻译功能

qt cmake 使用自带翻译工具配置步骤 创建Qt CMake 程序大体流程配置项目 CMake 及 代码使用流程最终CMake 如下最终工程链接为&#xff1a;参考 创建Qt CMake 程序 大体流程 配置项目 CMake 及 代码 在CMake 中添加如下代码, 导入相关的翻译库 find_package(QT NAMES Qt6 Qt…

【Linux】——如何安装g++

g的安装 sudo yum install -y gcc-c

FET113i-S核心板已支持RISC-V,打造国产化降本的更优解 -飞凌嵌入式

FET113i-S核心板是飞凌嵌入式基于全志T113-i处理器设计的国产工业级核心板&#xff0c;凭借卓越的稳定性和超高性价比&#xff0c;FET113i-S核心板得到了客户朋友们的广泛关注。作为一款拥有A7核RISC-V核DSP核的多核异构架构芯片&#xff0c;全志科技于近期释放了T113-i的RISC-…