Golang--文件操作

1、文件

文件:文件用于保存数据,是数据源的一种

os包下的File结构体封装了对文件的操作(记得包os包)

 

2、File结构体--打开文件和关闭文件

2.1 打开文件

打开文件,用于读取(函数):
传入一个字符串(文件的路径),返回的是文件的指针和是否打开成功error

2.2 关闭文件

关闭文件(方法):
使文件不能用于读写,它返回可能出现的错误

package main
import (
	"fmt"
	"os"
)

func main(){
	//打开文件
	file,err := os.Open("D:/Golang_Project/src/GoCode/test1_project/main/t.txt")
	
	if err != nil { //出错
		fmt.Println("文件打开失败")
		return
	}else{
		fmt.Printf("文件内容=%v\n",file) //文件内容=&{0xc0000a66c8}
	}

	//关闭文件--调用方法
	err = file.Close()
	if err != nil{
		fmt.Println("关闭失败")
	}else{
		fmt.Println("关闭成功")
	}
}

 

3、读取操作

IO流:用于程序和数据源之间进行沟通
方向:输入和输出(写入程序为输入,程序写出为输出,对应输入流和输出流)

一次性全部读取

读取文件的内容并显示在终端(使用ioutil一次将整个文件读入到内存中),这种方式适用于文件不大的情况。相关方法和函数(ioutil.ReadFile)(包:io/ioutil

package main
import (
	"fmt"
	"os"
	"io/ioutil"
)

func main(){
	//打开文件
	file,err := os.Open("D:/Golang_Project/src/GoCode/test1_project/main/t.txt")
	
	if err != nil { //出错
		fmt.Println("文件打开失败")
		return
	}else{
		//其实不需要进行Open和Close,因为ioutil.ReadFile()会自动打开和关闭文件
		content,errRead := ioutil.ReadFile("D:/Golang_Project/src/GoCode/test1_project/main/t.txt") //返回类型是[]byte和error
		if errRead!= nil{
			fmt.Println("文件读取失败")
		}else{
			fmt.Printf("文件内容=%s\n",string(content)) //文件内容=hello world
		}
	}

	//关闭文件--调用方法
	err = file.Close()
	if err != nil{
		fmt.Println("关闭失败")
	}else{
		fmt.Println("关闭成功")
	}
}

带缓冲区的读取

读取文件的内容并显示在终端(带缓冲区的方式--4096字节),适合读取比较大的文件,使用os.Open,file.Close,bufio.NewReader(),reader.ReadString函数和方法

package main
import (
	"fmt"
	"os"
	"bufio"
	"io"
)

func main(){
	//打开文件:
	file,err := os.Open("D:/Golang_Project/src/GoCode/test1_project/main/t.txt")
	//关闭文件--defer
	defer file.Close()
	//判断文件是否打开成功
	if err!= nil{
		fmt.Println("文件打开失败")
		return
	}else{
		//创建一个流
		reader := bufio.NewReader(file)
		//读取文件
		for{
			//循环读取文件
			str,errRead := reader.ReadString('\n')//以换行符为单位读取文件
			fmt.Println(str)
			if errRead == io.EOF{ //io.EOF表示已经读取到文件末尾
				break
			}
		}
	}
}

4、写入文件 



参数含义:

  1. name:要打开的路径
  2. flag:文件打开模式(可以利用"|"符号进行组合)
  3. perm:权限控制(linux/unix系统下才生效,windows下设置无效)-0666(-rw-rw-rw-)
package main
import (
	"fmt"
	"os"
	"bufio"
)

func main(){
	//写入文件
	//打开文件
	file,err := os.OpenFile("D:/Golang_Project/src/GoCode/test1_project/main/t.txt",os.O_CREATE|os.O_WRONLY,0666)
	//关闭文件--defer
	defer file.Close()
	//判断文件是否打开成功
	if err!= nil{
		fmt.Println("文件打开失败")
		return
	}else{
		//写入文件操作:io流 -> 缓冲输出流(带缓冲区)
		write := bufio.NewWriter(file)
		write.WriteString("hello world\n")
		//刷新缓冲区---> 才会将缓冲区的内容写入到文件中
		write.Flush()
	}
}

 

5、文件复制

文件复制 f1 - > f2:

  1. 读取f1文件
  2. 写入f2文件

package main
import (
	"fmt"
	"io/ioutil"
)

func main(){
	//定义源文件
	file1Path := "D:/Golang_Project/src/GoCode/test1_project/main/t.txt"
	//定义目标文件
	file2Path := "D:/Golang_Project/src/GoCode/test1_project/main/t1.txt"

	//对文件进行读取:
	content,err1 := ioutil.ReadFile(file1Path)
	if err1!= nil{
		fmt.Println("文件读取失败")
		return
	}

	//对文件进行写入:
	err2 := ioutil.WriteFile(file2Path,content,0666)
	if err2!= nil{
		fmt.Println("文件写入失败")
		return
	}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

BSAchongsds、

一、 ## 统计基因组整体信息 srun -A 2022099 -p Debug -n 2 -N 1 seqkit stats ~/yiyaoran/workspace/06.BSRseq/guo_BSR_pipline/ref/genome.fasta > genome.allstatcat genome.allstat 文件名 格式 类型 序列数量 总长度 最小长度 平均长…

聊一聊Elasticsearch的基本原理与形成机制

1、搜索引擎的基本原理 通常搜索引擎包括:数据采集、文本分析、索引存储、搜索等模块,它们之间的协作流程如下图: 数据采集模块负责采集需要搜索的数据源。 文本分析模块是将结构化数据中的长文本切分成有实际意义的词,这样用户…

**AI的三大支柱:神经网络、大数据与GPU计算的崛起之路**

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

Python | Leetcode Python题解之第542题01矩阵

题目: 题解: class Solution:def updateMatrix(self, matrix: List[List[int]]) -> List[List[int]]:m, n len(matrix), len(matrix[0])# 初始化动态规划的数组,所有的距离值都设置为一个很大的数dist [[10**9] * n for _ in range(m)]…

RabbitMQ 管理平台(控制中心)的介绍

文章目录 一、RabbitMQ 管理平台整体介绍二、Overview 总览三、Connections 连接四、Channels 通道五、Exchanges 交换机六、Queues 队列查看队列详细信息查看队列的消息内容 七、Admin 用户给用户分配虚拟主机 一、RabbitMQ 管理平台整体介绍 RabbitMQ 管理平台内有六个模块&…

【机器学习】聚类算法分类与探讨

💗💗💗欢迎来到我的博客,你将找到有关如何使用技术解决问题的文章,也会找到某个技术的学习路线。无论你是何种职业,我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章,也欢…

易语言模拟真人动态生成鼠标滑动路径

一.简介 鼠标轨迹算法是一种模拟人类鼠标操作的程序,它能够模拟出自然而真实的鼠标移动路径。 鼠标轨迹算法的底层实现采用C/C语言,原因在于C/C提供了高性能的执行能力和直接访问操作系统底层资源的能力。 鼠标轨迹算法具有以下优势: 模拟…

Linux:防火墙和selinux对服务的影响

1-1selinux 1-1 SELinux是对程序、文件等权限设置依据的一个内核模块。由于启动网络服务的也是程序,因此刚好也 是能够控制网络服务能否访问系统资源的一道关卡。 1-2 SELinux是通过MAC的方式来控制管理进程,它控制的主体是进程,而目标则是…

华为eNSP:QinQ

一、什么是QinQ? QinQ是一种网络技术,全称为"Quantum Insertion",也被称为"Q-in-Q"、"Double Tagging"或"VLAN stacking"。它是一种在现有的VLAN(Virtual Local Area Network&#xff0…

运动控制 PID算法

文章目录 一、自动控制简介1.1 开环控制系统1.2 闭环控制系统1.3 电机速度闭环控制系统 二、PID算法2.1 比例2.1.1 静态误差 2.2 积分2.3 微分环节2.4 位置式PID2.5 增量式PID 一、自动控制简介 自动控制系统是使用自动控制装置对关键控制参数进行自动控制,使它在收…

Pytorch实现transformer语言模型

转载自&#xff1a;| 03_language_model/02_Transformer语言模型.ipynb | 从头训练Transformer语言模型 |Open In Colab | Transformer语言模型 本节训练一个 sequence-to-sequence 模型&#xff0c;使用pytorch的 nn.Transformer <https://pytorch.org/docs/master/nn.ht…

C语言例题练手(1)

前几篇博客的内容已经涉及了C语言的部分语法知识&#xff0c;我们可以尝试做一些编程题&#xff0c;或者换一种说法就是可以写出什么样的程序以此来解决一些问题。 题目来自牛客网https://www.nowcoder.com和C语言菜鸟教程C 语言教程 | 菜鸟教程 数值计算 【例1】带余除法计…

Spring AI 核心概念

SpringAI 核心概念 1. Models2. Prompts3. Prompt Templates4. Embeddings5. Tokens6. Structured Output7. Bringing Your Data & APIs to the AI Model7.1 Retrieval Augmented Generation7.2 Function Calling 1. Models AI 模型是用于处理和生成信息的算法&#xff0c…

http请求响应详解

http介绍 http协议&#xff1a; Http”协议称为是“超文本传输协议”&#xff08;HTTP-Hypertext transfer protocol&#xff09;。它定义了浏览器怎么向万维网服务器请求万维网文档&#xff0c;以及服务器怎么样把文档传送给浏览器。 https协议&#xff1a; 传统的HTTP协议…

直播系统搭建教程安装说明

需要安装的软件(宝塔【软件商店】中查找安装): 1.PHP7.0 ~ PHP7.3 需要安装的扩展:(宝塔【PHP管理】【安装扩展】中安装) *PDO PHP Extension * MBstring PHP Extension * CURL PHP Extension * Mylsqi PHP Extension * Redis PHP Extension * fileinfo PHP Extension …

redis7学习笔记

文章目录 1. 简介1.1 功能介绍1.1.1 分布式缓存1.1.2 内存存储和持久化(RDBAOF)1.1.3 高可用架构搭配1.1.4 缓存穿透、击穿、雪崩1.1.5 分布式锁1.1.6 队列 1.2 数据类型StringListHashSetZSetGEOHyperLogLogBitmapBitfieldStream 2. 命令2.1 通用命令copydeldumpexistsexpire …

51c~C语言~合集1

我自己的原文哦~ https://blog.51cto.com/whaosoft/12428240 一、C语言和C的区别 ​ C语言虽说经常和C在一起被大家提起&#xff0c;但可千万不要以为它们是一个东西。现在我们常用的C语言是C89标准&#xff0c;C是C99标准的。C89就是在1989年制定的标准&#xff0c;如今最新…

【论文解读】EdgeYOLO:一种边缘实时目标检测器(附论文地址)

论文地址&#xff1a;https://arxiv.org/pdf/2302.07483 这篇文章的标题是《EdgeYOLO: An Edge-Real-Time Object Detector》&#xff0c;由中国北京理工大学的Shihan Liu、Junlin Zha、Jian Sun、Zhuo Li和Gang Wang共同撰写。这篇论文提出了一个基于最新YOLO框架的高效、低复…

基于SSM的企业管理系统(源码+lw+调试+技术指导)

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下&#xff0c;你想解决的问…

【MyBatis源码】CacheKey缓存键的原理分析

文章目录 Mybatis缓存设计缓存KEY的设计CacheKey类主体CacheKey组成CacheKey如何保证缓存key的唯一性 Mybatis缓存设计 MyBatis 每秒过滤众多数据库查询操作&#xff0c;这对 MyBatis 缓存键的设计提出了很高的要求。MyBatis缓存键要满足以下几点。 无碰撞&#xff1a;必须保证…