Golang--文件操作

news2024/11/7 6:31:24

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
	}

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

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

相关文章

Ubuntu学习笔记 - Day3

文章目录 学习目标:学习内容:学习笔记:vim简介vim键盘图工作模式 vim移动光标操作上下左右移动翻页 vim替换和删除操作替换删除 vim插入模式详解进入模式搜索 vim底行模式操作保存退出行号 学习目标: 一周掌握 Linux基本使用技巧 …

Java中的JDBC的详解

数据库驱动包 Java提出的一套关于数据库操作的接口 各个数据库厂商要把自己的api对接到/适配到jdbc上 程序员只需要掌握一套api就可以操作不同的数据库了 数据库厂商提供的这个原生api适配到jdbc转换程序,称为“数据库驱动包” 1)创建数据源 //1,创…

Apache-Hive数据库使用学习

前期准备 Hadoop-分布式部署(服务全部在线) Mysql-node1节点部署(确认安装正常) apache-hive -node1节点部署(需要与MySQL元数据联动存储) 参考博客: Hadoop Hadoop集群搭建-完全分布式_hadoop完…

【极客兔兔-Web框架Gee详解】Day2 上下文Context

文章目录 一、框架结构二、设计上下文(Context):day2-context/gee/context.go1. 设计Context必要性1.1 接口粒度过细:1.2 缺乏扩展性:2. 代码3. 优势三、路由(Router): day2-context/gee/router.go四、框架入口:day2-context/gee/gee.go1. 代码五、框架使用: day2-context/m…

LeetCode17. 电话号码的字母组合(2024秋季每日一题 59)

给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 示例 1: 输入:digits “23” 输出:[“…

DApp开发定制:合约设计与源码搭建支持快速上线

随着区块链技术的飞速发展,去中心化应用(DApp)已经成为区块链生态中不可或缺的一部分。DApp不仅改变了传统互联网应用的运作方式,还通过去中心化的理念和智能合约的支持,赋能了用户和开发者。无论是金融、游戏、社交、…

【C++】手动实现C++ vector容器:深入理解动态数组的工作原理

💯个人主页: 起名字真南 💯个人专栏:【数据结构初阶】 【C语言】 【C】 【OJ题解】 目录 1. 引言2. 实现思路3. vector 容器的代码实现4. 代码详解4.1 构造与析构函数4.2 容量管理4.3 迭代器与访问操作4.4 增删操作 5.测试代码6. 时间和空间复杂度分析7.…

深入探讨钉钉与金蝶云星空的数据集成技术

钉钉报销数据集成到金蝶云星空的技术案例分享 在企业日常运营中,行政报销流程的高效管理至关重要。为了实现这一目标,我们采用了轻易云数据集成平台,将钉钉的行政报销数据无缝对接到金蝶云星空的付款单系统。本次案例将重点介绍如何通过API接…

Appium环境搭建/使用教程(图文超详细)

一,环境依赖JDK和Android SDK搭建 (1) JDK: 下载安装(推荐java8版本,其他版本不兼容,会导致appiumServer启动不了) 下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html根据自己的系…

大数据-209 数据挖掘 机器学习理论 - 梯度下降 梯度下降算法调优

点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完)HDFS(已更完)MapReduce(已更完&am…

模拟实现strcat函数

1.strcat的作用 char * strcat ( char * destination, const char * source ); 作用:将源字符串的附加到目标字符串中。目标字符串中的终止空字符将被源字符串的第一个字符替换,并且在将两个字符串连接形成的新字符串的末尾将包含一个空字符。 destina…

c++多线程QThreadpool调用Python脚本时崩溃报错的解决方案二

问题 还是c Qt多线程调用Python脚本时的问题。使用QthreadPool的方式调用,按照上次的解决方案也可以实现,虽然可能不出现崩溃问题。但是仍然有很大可能会出现死锁。即调入函数后,再无输出,变成一个黑洞… 解决方案 因为我使用的…

知从科技受邀出席ARM日产技术日

10月29日,上海知从科技有限公司受 ARM 之邀,参与了由其主办的日产技术日活动。此次活动在日本神奈川县厚木市的日产技术中心盛大举行,这一活动汇聚了行业内的前沿技术与精英人才,成为科技创新技术交流的重要平台。 知从科技积极参…

设计模式讲解02—责任链模式(Chain)

1. 概述 定义:责任链模式是一种行为型模式,在这个模式中,通常创建了一个接收者对象的链来处理请求,该请求沿着链的顺序传递。直到有对象处理该请求为止,从而达到解耦请求发送者和请求处理者的目的。 解释:责…

Vue项目引入侧边导航栏

Vue项目引入侧边导航栏 侧边导航栏能够非常方便进行信息检索,这一款不错的侧边导航栏:vue-side-catalog,基本上能满足快速检索的需求 安装 官网 首先需要进入** vue-side-catalog**的官网,然后下载对应的源码,下载…

【大数据学习 | kafka】kafka的偏移量管理

1. 偏移量的概念 消费者在消费数据的时候需要将消费的记录存储到一个位置,防止因为消费者程序宕机而引起断点消费数据丢失问题,下一次可以按照相应的位置从kafka中找寻数据,这个消费位置记录称之为偏移量offset。 kafka0.9以前版本将偏移量信…

专业 UI 设计公司:为您开启交互设计新征程

在当今数字化时代,UI设计不仅是产品外观的呈现,更是用户体验的核心组成部分。专业的UI设计公司凭借其深厚的设计底蕴、前沿的设计理念以及丰富的项目经验,能够为企业开启全新的交互设计征程,提升产品的市场竞争力。以下是对一家专…

【神经科学学习笔记】基于分层嵌套谱分割(Nested Spectral Partition)模型分析大脑网络整合与分离的学习总结

一、前言 1.学习背景 最近在学习脑网络分析方法时,笔者偶然读到了一篇发表在Physical Review Letters上的文章,文章介绍了一种名为嵌套谱分割(Nested-Spectral Partition, NSP)的方法,用于研究大脑功能网络的分离和整合特性。 传统的脑网络分…

初识C++(上) -- C++的关键字、命名空间、缺省参数以及函数的重载

目录 一、C的关键字(C98) 二、命名空间 1、命名冲突 2、命名空间 2.1 命名空间的定义 (1). 命名空间定义的例子以及命名空间的嵌套: (2). 同一个工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间中: 2…

计算机网络socket编程(1)_UDP网络编程实现echo server

个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 计算机网络socket编程(1)_UDP网络编程实现echo server 收录于专栏【计算机网络】 本专栏旨在分享学习计算机网络的一点学习笔记,欢迎大家在评论区交…