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.xdnf.cn/news/39.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

8. 数据结构——邻接表、邻接矩阵的基本操作

一、邻接表 1. 内容 2. 实现代码(直接可以复制使用) //邻接表的相关操作 #include<bits/stdc.h> #define MVnum 100 #define OK 1 #define ERROR -1 using namespace std;typedef int Status; typedef char VerTexType; //假设顶点的数据类型为char typedef int ArcT…

【问题记录】当机器人存在多个串口需要绑定时udevadm的作用

一、正常绑定 输入sudo udevadm info -a /dev/ttyUSBx | grep KERNELS 命令 会出现KERNELS的编号&#xff0c;记录编号。 修改规则文件/etc/udev/rules.d/99-usb.rules 添加以下命令 KERNEL"ttyUSB*", KERNELS"2-1.2:1.0", MODE:"0666", GROU…

快消品行业数字化转型:定制开发 S2B2C 商城小程序的主战场选择与突破

摘要&#xff1a;在快消品行业数字化转型的背景下&#xff0c;企业内部各部门虽积极尝试数字化但效果欠佳&#xff0c;核心问题在于数字化规模小难以实现企业整体转型&#xff0c;快消品龙头企业更为突出。定制开发 21 链动模式 S2B2C 商城小程序为解决这一问题提供了新途径。该…

Windows、Linux系统上进行CPU和内存压力测试

CPU和内存压力测试 1. Linux环境 Linux环境下&#xff0c;我们可以用 stress 工具进行内存、CPU等的压力测试。 【1】. stress工具说明 [kalamikysrv1 ~]$ stress --help stress imposes certain types of compute stress on your systemUsage: stress [OPTION [ARG]] ...-…

STM32使用串口下载程序

STM32使用串口下载程序 FluMcu软件下载地址 单片机在线编程网 STM32 MCU启动模式配置(Boot Configuration) 单片机复位后&#xff0c;SYSCLK的第4个上升沿&#xff0c;BOOT引脚上的值将锁存&#xff0c;用户可以通过设置BOOT0和BOOT1引脚的值&#xff0c;来选择复位后的启动…

每天五分钟深度学习pytoroch:基于pytorch搭建逻辑回归算法模型

本文重点 前面我们学习了线性回归模型的搭建,无论是基于pytorch还是不基于pytorch,以上的模型都是回归模型,本文我们将使用pytorch搭建逻辑回归模型,逻辑回归模型是一个经典的分类问题。 模型搭建 class LogisticRegression(nn.Module) : def __init__(self) :super (Lo…

Mybatis-18.动态SQL-sqlinclude

一.sql&include 为什么需要<sql>和<include>标签&#xff1f; 这是因为这些代码是重复的&#xff0c;能够消除重复会提高代码的可读性和效率。 那我们就可以使用<sql>标签对这些片段进行一个抽取。然后在原来抽取的地方再将这个<sql>片段引用进来。…

探索开源MiniMind项目:让大语言模型不再神秘(1)

简介&#xff1a; 声明&#xff1a;本人非此项目作者&#xff0c;仅仅是探索项目&#xff0c;分享项目。如有不妥&#xff0c;请联系我删除&#xff01; 原项目地址&#xff1a;GitHub - jingyaogong/minimind: 「大模型」3小时完全从0训练26M的小参数GPT&#xff0c;个人显卡即…

HTML 基础标签——文本内容标签 <ul>、<ol>、<blockquote> 、<code> 等标签的用法详解

文章目录 1. 标题标签2. 段落标签3. 文本格式化标签4. 列表标签4.1 无序列表 `<ul>`4.2 有序列表 `<ol>`5. 引用标签5.1 块引用 `<blockquote>`5.2 行内引用 `<q>`5.3 作品引用 `<cite>`6. 代码和预格式文本标签6.1 代码标签 `<code>`6.2 …

qt QMenuBar详解

1、概述 QMenuBar是Qt框架中用于创建菜单栏的类&#xff0c;它继承自QWidget。QMenuBar通常位于QMainWindow对象的标题栏下方&#xff0c;用于组织和管理多个QMenu&#xff08;菜单&#xff09;和QAction&#xff08;动作&#xff09;。菜单栏提供了一个水平排列的容器&#x…

GenAI 生态系统现状:不止大语言模型和向量数据库

自 20 个月前 ChatGPT 革命性的推出以来&#xff0c;生成式人工智能&#xff08;GenAI&#xff09;领域经历了显著的发展和创新。最初&#xff0c;大语言模型&#xff08;LLMs&#xff09;和向量数据库吸引了最多的关注。然而&#xff0c;GenAI 生态系统远不止这两个部分&#…

聪明的你能从千门八将108局学到什么,对你的未来人生有哪些深远的影响?

千门八将108局&#xff1a;智慧的启迪与人生指引 在古老智慧的宝库中&#xff0c;千门八将108局犹如璀璨星辰&#xff0c;闪耀着神秘而深邃的光芒。那些认真钻研过这些局的人&#xff0c;仿佛经历了一场穿越时空的智慧洗礼&#xff0c;从中收获了无价的人生财富。 一、从千门八…

GraphQL 与 Elasticsearch 相遇:使用 Hasura DDN 构建可扩展、支持 AI 的应用程序

作者&#xff1a;来自 Elastic Praveen Durairaju GraphQL 提供了一种高效且灵活的数据查询方式。本博客将解释 Hasura DDN 如何与 Elasticsearch 配合使用&#xff0c;以实现高性能和元数据驱动的数据访问。 此示例的代码和设置可在此 GitHub 存储库 - elasticsearch-subgraph…

根据问题现象、用户操作场景及日志打印去排查C++软件问题,必要时尝试去复现问题

目录 1、概述 2、通过现有信息无法定位问题时&#xff0c;则需要尝试去复现问题 3、非崩溃问题与崩溃问题的一般排查思路 3.1、非崩溃问题的排查思路 3.2、崩溃问题的排查思路 4、难以复现问题的可能原因总结 4.1、问题难以复现&#xff0c;可能和某种特殊的业务场景或操…

11-Dockerfile

11-Dockerfile Dockerfile Dockerfile是用来构建Docker镜像的文本文件&#xff0c;是由一条条构建镜像所需的指令和参数构成的脚本。 构建步骤&#xff1a; 编写Dockerfile文件docker build命令构建镜像docker run依据镜像运行容器实例 构建过程 Dockerfile编写&#xff1a…

CMS getshell

进入前台 漏洞为前台任意用户密码修改和前台用户文件上传然后getshell 1. 弱口令进入前台用户admin123/admin123 2. 进入会员用户后点击内容中心 点击发布文章 存在文件上传&#xff0c;发现后缀和MIME类型都是白名单 但是在原文件的基础上继续添加随意后缀&#xff0c;发现成功…

Java使用apache.commons.io框架下的FileUtils类实现文件的写入、读取、复制、删除

Apache Commons IO 是 Apache 开源基金组织提供的一组有关IO&#xff08;Input/Output&#xff09;操作的小框架&#xff0c;它是 Apache Commons 项目的一部分&#xff0c;专注于提供简单易用的 API&#xff0c;用于处理输入和输出操作。Apache Commons IO 是一个功能强大的 J…

CRON组件一个复杂的一个简单的

CRON组件一个复杂的一个简单的 一个是复杂点的一个是简单点。 1.以简单的为例使用&#xff1a; 父组件 import CronSimple from "/views/xxx/components/cron-simple/index.vue";components: {CronSimple}<el-dialog title"调度CRON"v-if"cronV…

Kubernetes容器日志处理方案

Kubernetes容器日志处理方案 50-Kubernetes容器日志处理方案 0 前言 k8s里面对容器日志的处理都叫cluster-level-logging&#xff0c;即该日志处理系统&#xff0c;与容器、Pod及Node的生命周期完全无关。这种设计当然为保证&#xff0c;无论容器挂、Pod被删&#xff0c;甚至节…

【青牛科技】GC4921替代BD6921/罗姆在水泵、筋膜枪、吸尘器和电动工具中的应用

在现代电动设备中&#xff0c;电机驱动控制器的选择对设备的性能和效率至关重要。GC4921作为一种新型的电机驱动控制器&#xff0c;逐渐被视为BD6921/罗姆的替代品。本文将对GC4921与BD6921进行对比&#xff0c;探讨其在水泵、筋膜枪、吸尘器和电动工具等设备中的应用优势。 1…