当前位置: 首页 > article >正文

go语言文件和目录

打开和关闭文件

os.Open()函数能够打开一个文件,返回一个*File 和一个 err。操作完成文件对象以后一定要记得关闭文件。

package mainimport ("fmt""os"
)func main() {// 只读方式打开当前目录下的 main.go 文件file, err := os.Open("./main.go")if err != nil {fmt.Println("open file failed!, err:", err)return}fmt.Println(file)  //&{0xc000078780}defer file.Close() // 关闭文件
}

为了防止文件忘记关闭,我们通常使用 defer 注册文件关闭语句。

file.Read() 读取文件

  1. 基本使用
    Read 方法定义如下:
func (f *File) Read(b []byte) (n int, err error)

它接收一个字节切片,返回读取的字节数和可能的具体错误,读到文件末尾时会返回 0 和
io.EOF。 举个例子:

package mainimport ("fmt""io""os"
)func main() {// 只读方式打开当前目录下的 main.go 文件file, err := os.Open("./main.go")if err != nil {fmt.Println("open file failed!, err:", err)return}defer file.Close()// 使用 Read 方法读取数据,注意一次只会读取 128 个字节var tmp = make([]byte, 128)n, err := file.Read(tmp)if err == io.EOF {fmt.Println("文件读完了")return}if err != nil {fmt.Println("read file failed, err:", err)return}fmt.Printf("读取了%d 字节数据\n", n)fmt.Println(string(tmp[:n]))
}

运行结果:

读取了128 字节数据
package mainimport ("fmt""io""os"
)func main() {// 只读方式打开当前目录下的 main.go 文件file, err :=

循环读取

使用 for 循环读取文件中的所有数据

package mainimport ("fmt""io""os"
)func main() {// 只读方式打开当前目录下的 main.go 文件file, err := os.Open("./main.go")if err != nil {fmt.Println("open file failed!, err:", err)return}defer file.Close()// 循环读取文件var content []bytevar tmp = make([]byte, 128)for {n, err := file.Read(tmp)if err == io.EOF {fmt.Println("文件读完了")break}if err != nil {fmt.Println("read file failed, err:", err)return}content = append(content, tmp[:n]...)}fmt.Println(string(content))
}

bufio 读取文件

bufio 是在 file 的基础上封装了一层 API,支持更多的功能。

package mainimport ("bufio""fmt""io""os"
)func main() {file, err := os.Open("./main.go")if err != nil {fmt.Println("open file failed, err:", err)return}defer file.Close()reader := bufio.NewReader(file)for {line, err := reader.ReadString('\n') //注意是字符if err == io.EOF {if len(line) != 0 {fmt.Println(line)}fmt.Println("文件读完了")break}if err != nil {fmt.Println("read file failed, err:", err)return}fmt.Print(line)}
}

ioutil 读取整个文件

io/ioutil 包的 ReadFile 方法能够读取完整的文件,只需要将文件名作为参数传入。

package mainimport ("fmt""io/ioutil"
)func main() {content, err := ioutil.ReadFile("./main.go")if err != nil {fmt.Println("read file failed, err:", err)return}fmt.Println(string(content))
}

文件写入操作

os.OpenFile()函数能够以指定模式打开文件,从而实现文件写入相关功能。

func OpenFile(name string, flag int, perm FileMode) (*File, error) {
... }

其中:
name:要打开的文件名 flag:打开文件的模式。模式有以下几种:
在这里插入图片描述
perm:文件权限,一个八进制数。r(读)04,w(写)02,x(执行)01。

  1. Write 和 WriteString
package mainimport ("fmt""os"
)func main() {file, err := os.OpenFile("D:/tmp/text.txt", os.O_CREATE|os.O_RDWR, 0666)if err != nil {fmt.Println("open file failed, err:", err)return}defer file.Close()str := "你好 golang"file.Write([]byte(str))        //写入字节切片数据file.WriteString("直接写入的字符串数据") //直接写入字符串数据
}

在这里插入图片描述

  1. bufio.NewWriter
package mainimport ("bufio""fmt""os"
)func main() {file, err := os.OpenFile("D:/text.txt", os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0666)if err != nil {fmt.Println("open file failed, err:", err)return}defer file.Close()writer := bufio.NewWriter(file)for i := 0; i < 10; i++ {writer.WriteString("你好 golang\r\n") //将数据先写入缓存}writer.Flush() //将缓存中的内容写入文件(注意)
}

在这里插入图片描述

  1. ioutil.WriteFile
package mainimport ("fmt""io/ioutil"
)func main() {str := "hello golang"err := ioutil.WriteFile("D:/text.txt", []byte(str), 0666)if err != nil {fmt.Println("write file failed, err:", err)return}
}

在这里插入图片描述

文件重命名

package mainimport ("fmt""os"
)func main() {err := os.Rename("D:/text.txt", "D:/test.txt") //只能同盘操作if err != nil {fmt.Println(err)}
}

复制文件

第一种复制文件方法:ioutil 进行复制

package mainimport ("fmt""io/ioutil"
)// 自己编写一个函数,接收两个文件路径 srcFileName dstFileName
func CopyFile(dstFileName string, srcFileName string) (err error) {input, err := ioutil.ReadFile(srcFileName)if err != nil {fmt.Println(err)return err}err = ioutil.WriteFile(dstFileName, input, 0644)if err != nil {fmt.Println("Error creating", dstFileName)fmt.Println(err)return err}return nil
}
func main() {srcFile := "D:/test.txt"dstFile := "D:/test1.txt"err := CopyFile(dstFile, srcFile)if err == nil {fmt.Printf("拷贝完成\n")} else {fmt.Printf("拷贝错误 err=%v\n", err)}
}

在这里插入图片描述

第二种复制文件方法流的方式复制:

package mainimport ("fmt""io""os"
)// 自己编写一个函数,接收两个文件路径 srcFileName dstFileName
func CopyFile(dstFileName string, srcFileName string) (err error) {source, _ := os.Open(srcFileName)destination, _ := os.OpenFile(dstFileName, os.O_CREATE|os.O_WRONLY, 0666)buf := make([]byte, 128)for {n, err := source.Read(buf)if err != nil && err != io.EOF {return err}if n == 0 {break}if _, err := destination.Write(buf[:n]); err != nil {return err}}return err
}func main() {//调用 CopyFile 完成文件拷贝srcFile := "D:/test.txt"dstFile := "D:/test2.txt"err := CopyFile(dstFile, srcFile)if err == nil {fmt.Printf("拷贝完成\n")} else {fmt.Printf("拷贝错误 err=%v\n", err)}
}

在这里插入图片描述

创建目录

一次创建一个目录

package mainimport ("fmt""os"
)func main() {err := os.Mkdir("D:/abc", 0666)if err != nil {fmt.Println(err)}
}

在这里插入图片描述

一次创建多个目录:

package mainimport ("fmt""os"
)func main() {err := os.MkdirAll("D:/dir1/dir2", 0666)if err != nil {fmt.Println(err)}
}

在这里插入图片描述

删除目录和文件

删除一个目录或者文件:

package mainimport ("fmt""os"
)func main() {err := os.Remove("D:/test.txt")if err != nil {fmt.Println(err)}
}

一次删除多个目录或者文件:

package mainimport ("fmt""os"
)func main() {err := os.RemoveAll("D:/dir1/dir2")if err != nil {fmt.Println(err)}
}

参考文献

https://gobyexample.com/

https://www.w3schools.com/go/

https://go.dev/doc/tutorial/

https://www.geeksforgeeks.org/golang-tutorial-learn-go-programming-language/

相关文章:

go语言文件和目录

打开和关闭文件 os.Open()函数能够打开一个文件&#xff0c;返回一个*File 和一个 err。操作完成文件对象以后一定要记得关闭文件。 package mainimport ("fmt""os" )func main() {// 只读方式打开当前目录下的 main.go 文件file, err : os.Open(".…...

Solidity09 Solidity构造函数和修饰器

文章目录 一、构造函数二、修饰器三、OpenZeppelin的Ownable标准实现四、Remix 演示示例五、代码示例 这一讲&#xff0c;我们将用合约权限控制&#xff08; Ownable&#xff09;的例子介绍 Solidity语言中构造函数&#xff08; constructor&#xff09;和独有的修饰器&…...

ES6 Map 数据结构是用总结

1. Map 基本概念 Map 是 ES6 提供的新的数据结构&#xff0c;它类似于对象&#xff0c;但是"键"的范围不限于字符串&#xff0c;各种类型的值&#xff08;包括对象&#xff09;都可以当作键。Map 也可以跟踪键值对的原始插入顺序。 1.1 基本用法 // 创建一个空Map…...

使用wpa_supplicant和wpa_cli 扫描wifi热点及配网

一&#xff1a;简要说明 交叉编译wpa_supplicant工具后会有wpa_supplicant和wpa_cli两个程序生产&#xff0c;如果知道需要连接的wifi热点及密码的话不需要遍历及查询所有wifi热点的名字及信号强度等信息的话&#xff0c;使用wpa_supplicant即可&#xff0c;否则还需要使用wpa_…...

json转excel,在excel内导入json, json-to-excel插件

简介 JSON 转 Excel 是一款 Microsoft Excel 插件&#xff0c;可将 JSON 数据转换为 Excel 表格。 要求 此插件适用于以下环境&#xff1a;Excel 2013 Service Pack 1 或更高版本、Excel 2016 for Mac、Excel 2016 或更高版本、Excel Online。 快速开始 本快速开始指南适用…...

大模型应用与实战:专栏概要与内容目录

文章目录 大模型应用与实战&#x1f4da; 核心内容模块一、大模型推理与部署1.1 推理框架应用实践1.2 框架源码深度解析1.3 高并发部署优化1.4 国产化平台适配 二、Agent框架专题2.1 Langchain系列2.2 Qwen-Agent系列2.3 Dify应用实践2.4 框架对比与迁移 三、微调技术研究3.1 微…...

ZooKeeper 的典型应用场景:从概念到实践

引言 在分布式系统的生态中&#xff0c;ZooKeeper 作为一个协调服务框架&#xff0c;扮演着至关重要的角色。它的设计目的是提供一个简单高效的解决方案来处理分布式系统中常见的协调问题。本文将详细探讨 ZooKeeper 的典型应用场景&#xff0c;包括但不限于配置管理、命名服务…...

Arbess基础教程-创建流水线

Arbess(谐音阿尔卑斯) 是一款开源免费的 CI/CD 工具&#xff0c;本文将介绍如何使用 Arbess 配置你的第一条流水线&#xff0c;以快速入门上手。 1. 创建流水线 根据不同需求来创建不同的流水线。 1.1 配置基本信息 配置流水线的基本信息&#xff0c;如分组&#xff0c;环境&…...

科普书《从一到无穷大》的科普知识推翻百年集论

科普书《从一到无穷大》的科普知识推翻百年集论 黄小宁 “我们给两组无穷大数列中的各个数一一配对&#xff0c;如果最后这两组都一个不剩&#xff0c;这两组无穷大就是相等的&#xff1b;如果有一组还有些数没有配出去&#xff0c;这一组就比另一组大些&#xff0c;或者说强些…...

【键盘识别】实例分割

第一步 键盘检测 方案一 canny边缘检测 canny边缘检测检测结果不稳定,容易因为复杂背景或光线变换检测出其他目标。 如图是用canny边缘检测方法标出的检测出的边缘的四个红点。 参考的是这篇文章OpenCV实战之三 | 基于OpenCV实现图像校正_opencv 图像校正-CSDN博客 方案二…...

25/2/7 <机器人基础>雅可比矩阵计算 雅可比伪逆

雅可比矩阵计算 雅可比矩阵的定义 假设我们有一个简单的两个关节的平面机器人臂&#xff0c;其末端执行器的位置可以表示为&#xff1a; 其中&#xff1a; L1​ 和 L2 是机器人臂的长度。θ1​ 和 θ2是关节的角度。 计算雅可比矩阵 雅可比矩阵 JJ 的定义是将关节速度与末…...

apisix的real-ip插件使用说明

k8s集群入口一般都需要过负载均衡&#xff0c;然后再到apisix。 这时候如果后台业务需要获取客户端ip&#xff0c;可能拿到的是lb或者网关的内网ip。 这里一般要获取真实ip需要做几个处理。 1. 负载均衡上&#xff0c;一般支持配置获取真实ip参数&#xff0c;需要配置上。然…...

位图的深入解析:从数据结构到图像处理与C++实现

在学习优选算法课程的时候&#xff0c;博主学习位运算了解到位运算的这个概念&#xff0c;之前没有接触过&#xff0c;就查找了相关的资料&#xff0c;丰富一下自身&#xff0c;当作课外知识来了解一下。 位图&#xff08;Bitmap&#xff09;是一种用于表示图像的数据结构&…...

Python实现GO鹅优化算法优化支持向量机SVM分类模型项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后关注获取。 1.项目背景 随着信息技术的迅猛发展&#xff0c;数据量呈爆炸式增长&#xff0c;如何从海量的数据中提取有价值…...

Deno vs Node.js:性能对比深度解析

1. 引言 Deno 和 Node.js 都是基于 V8 引擎的 JavaScript 运行时环境&#xff0c;然而它们在架构、模块管理、安全性和性能方面存在显著差异。Deno 由 Node.js 的原始作者 Ryan Dahl 开发&#xff0c;旨在解决 Node.js 设计上的一些问题&#xff0c;比如包管理、安全模型和 Ty…...

我用AI做数据分析之数据清洗

我用AI做数据分析之数据清洗 AI与数据分析的融合效果怎样&#xff1f; 这里描述自己在使用AI进行数据分析&#xff08;数据清洗&#xff09;过程中的几个小故事&#xff1a; 1. 变量名的翻译 有一个项目是某医生自己收集的数据&#xff0c;变量名使用的是中文&#xff0c;分…...

备战蓝桥杯:双指针(滑动窗口)算法之逛花展

P1638 逛画展 - 洛谷 | 计算机科学教育新生态 这道题我们只要用一个kind和一个mp[N]的数组就能解决了 我们的解法1就是暴力枚举&#xff0c;先固定2&#xff0c;从2开始找连续的满足所有种类的最短的子数组&#xff0c;然后固定5&#xff0c;3&#xff0c;1&#xff0c;3&…...

【sqlite】python操作sqlite3(含测试)

个人小项目或者小团队&#xff0c;sqllite很适用&#xff0c;数据库封装操作如下 #!/usr/bin/env python # -*- coding: utf-8 -*- # Time : 2025-02-08 13:57 # Author : duxiaowei # File : connect_sqllite.py # Software: PyCharm """ sqllite操作, …...

mybatis 是否支持延迟加载?延迟加载的原理是什么?

1. MyBatis 是否支持延迟加载&#xff1f; 是的&#xff0c;MyBatis 支持延迟加载。延迟加载的主要功能是推迟数据加载的时机&#xff0c;直到真正需要时再去加载。这种方式能提高性能&#xff0c;尤其是在处理关系型数据时&#xff0c;可以避免不必要的数据库查询。 具体来说…...

collabora online+nextcloud+mariadb在线文档协助

1、环境 龙蜥os 8.9 docker 2、安装docker dnf -y install dnf-plugins-core dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sed -i shttps://download.docker.comhttps://mirrors.tuna.tsinghua.edu.cn/docker-ce /etc/yum.repos.…...

深度学习中的Checkpoint是什么?

诸神缄默不语-个人CSDN博文目录 文章目录 引言1. 什么是Checkpoint&#xff1f;2. 为什么需要Checkpoint&#xff1f;3. 如何使用Checkpoint&#xff1f;3.1 TensorFlow 中的 Checkpoint3.2 PyTorch 中的 Checkpoint3.3 transformers中的Checkpoint 4. 在 NLP 任务中的应用5. 总…...

字符串高频算法:无重复字符的最长子串

题目 3. 无重复字符的最长子串 - 力扣&#xff08;LeetCode&#xff09; 解题思路 思路 方法: 滑动窗口 [!简单思路] [^1]以示例一中的字符串 abcabcbb 为例&#xff0c;找出从每一个字符开始的&#xff0c;不包含重复字符的最长子串&#xff0c;其中最长的那个字符串即为答…...

用深度学习模型构建海洋动物图像分类保姆教程

使用深度学习模型构建深度学习海洋动物图像分类模型的完整步骤如下&#xff0c;分为关键阶段和详细操作说明&#xff1a; 1. 数据准备与预处理 1.1 数据集组织 按类别分文件夹存储图像&#xff0c;例如&#xff1a;dataset/train/class1/class2/...val/class1/class2/...test…...

51单片机俄罗斯方块计分函数

/************************************************************************************************************** * 名称&#xff1a;scoring * 功能&#xff1a;计分 * 参数&#xff1a;NULL * 返回&#xff1a;NULL * 备注&#xff1a;采用非阻塞延时 ****************…...

Android开发获取缓存,删除缓存

Android开发获取缓存&#xff0c;删除缓存 app设置中往往有清理缓存的功能。会显示当前缓存时多少&#xff0c;然后可以点击清理缓存 直接上代码&#xff1a; object CacheHelper {/*** 获取缓存大小* param context* return* throws Exception*/JvmStaticfun getTotalCache…...

npm无法加载文件 因为此系统禁止运行脚本

安装nodejs后遇到问题&#xff1a; 在项目里【node -v】可以打印出来&#xff0c;【npm -v】打印不出来&#xff0c;显示npm无法加载文件 因为此系统禁止运行脚本。 但是在winr&#xff0c;cmd里【node -v】,【npm -v】都也可打印出来。 解决方法&#xff1a; cmd里可以打印出…...

NLP_[2]-认识文本预处理

文章目录 1 认识文本预处理1 文本预处理及其作用2. 文本预处理中包含的主要环节2.1 文本处理的基本方法2.2 文本张量表示方法2.3 文本语料的数据分析2.4 文本特征处理2.5数据增强方法2.6 重要说明 2 文本处理的基本方法1. 什么是分词2 什么是命名实体识别3 什么是词性标注 1 认…...

知识库升级新思路:用生成式AI打造智能知识助手

在当今信息爆炸的时代&#xff0c;企业和组织面临着海量数据的处理和管理挑战。知识库管理系统&#xff08;Knowledge Base Management System, KBMS&#xff09;作为一种有效的信息管理工具&#xff0c;帮助企业存储、组织和检索知识。然而&#xff0c;传统的知识库系统往往依…...

蚂蚁爬行最短问题

初二数学问题记录 分析过程 考点&#xff1a;2点之间直线最短。 思考过程&#xff1a;将EBCF以BC为边翻折&#xff0c;EF边翻折后为&#xff0c;则A为蚂蚁需要爬行的最小距离。...

【电机控制器】STC8H1K芯片——低功耗

【电机控制器】STC8H1K芯片——低功耗 文章目录 [TOC](文章目录) 前言一、芯片手册说明二、IDLE模式三、PD模式四、PD模式唤醒五、实验验证1.接线2.视频&#xff08;待填&#xff09; 六、参考资料总结 前言 使用工具&#xff1a; 1.STC仿真器烧录器 提示&#xff1a;以下是本…...