编程笔记 Golang基础 042 文件处理
编程笔记 Golang基础 042 文件处理
- 一、文件处理
- 二、Go语言文件处理
- 创建文件和写入内容
- 打开文件并按模式读写
- 读取文件内容
- 更高级的文件和IO操作
- 改变文件权限
- 目录操作
- 小结
一、文件处理
文件处理是指在计算机科学中,对存储在磁盘或其他持久性存储介质上的文件进行的一系列操作。这包括但不限于以下几个方面:
-
文件的创建:创建新的文件,为后续的数据存储做好准备。
-
文件的打开与关闭:通过系统调用或编程语言提供的API打开已存在的文件或者新建的文件,获取一个指向文件的引用(文件描述符或文件句柄),之后在完成文件操作后,正确地关闭文件以释放系统资源。
-
文件读取:从文件中读取数据,可以是字符、字符串、整数或其他数据类型,按照设定的编码或格式解析内容。
-
文件写入:将数据写入文件,可以是覆盖原有内容,也可以是追加到文件末尾。
-
文件定位:通过移动文件指针,实现对文件内特定位置的读写操作。
-
文件删除:移除不再需要的文件。
-
文件属性修改:改变文件的访问权限、所有权、时间戳(如最后访问时间、最后修改时间)等元数据。
-
文件复制与移动:在磁盘的不同位置之间复制或移动文件。
-
文件搜索与目录遍历:查找特定名称或类型的文件,在目录结构中导航。
-
文件压缩与解压缩:对文件进行压缩节省存储空间或传输时的数据量,解压缩还原原始文件。
在具体编程实践中,例如在Go语言中,上述操作可以通过标准库中的os和io等包提供的函数来实现。例如,使用os.Open、os.Create、os.ReadFile、os.WriteFile等函数来进行相应的文件处理任务。同时,针对大文件操作和高效读写,还可以利用bufio等额外的库来优化性能。
二、Go语言文件处理
在 Go 语言中,文件处理涉及到创建、读取、写入、追加、关闭文件以及更改文件权限等多种操作。以下是一些关键概念和函数的详解:
创建文件和写入内容
import ("io/ioutil""os"
)// 使用 ioutil 包一次性创建并写入文件内容
func writeToFile(filename string, content []byte, perm os.FileMode) error {return ioutil.WriteFile(filename, content, perm)
}// 示例:
data := []byte("Hello, World!")
err := writeToFile("output.txt", data, 0644) // 默认权限为 0644,意味着所有者可读写,其他人可读
if err != nil {panic(err)
}
打开文件并按模式读写
import ("os"
)// 使用 os 包打开文件
func openFile(filename string, flag int, perm os.FileMode) (*os.File, error) {return os.OpenFile(filename, flag, perm)
}// 示例:
file, err := openFile("input.txt", os.O_CREATE|os.O_WRONLY|os.O_TRUNC, 0644)
if err != nil {panic(err)
}
defer file.Close() // 记得在完成操作后关闭文件// 写入内容
_, err = file.WriteString("Some text to write")
if err != nil {panic(err)
}// 若要追加内容而不是覆盖文件,应使用如下模式:
// _, err = openFile("input.txt", os.O_APPEND|os.O_WRONLY, 0644)
读取文件内容
import ("io/ioutil"
)// 使用 ioutil 包读取文件全部内容
func readFile(filename string) ([]byte, error) {return ioutil.ReadFile(filename)
}// 示例:
content, err := readFile("input.txt")
if err != nil {panic(err)
}
fmt.Println(string(content))
更高级的文件和IO操作
对于更复杂的文件操作,可能需要用到 bufio(带缓冲的读写)、io.Reader 和 io.Writer 接口,以及 ioutil.ReadAll、bufio.NewScanner 等函数。
改变文件权限
import ("os"
)// 改变文件权限
func changePermissions(filename string, mode os.FileMode) error {return os.Chmod(filename, mode)
}// 示例:
err := changePermissions("output.txt", 0755)
if err != nil {panic(err)
}
目录操作
除了文件外,Go 还提供了对目录进行操作的函数,如 os.Mkdir 创建目录,os.RemoveAll 删除文件或目录,os.ReadDir 列出目录内容等。
以上只是文件处理的基本操作,实际使用时请务必处理好错误并适时关闭文件以释放资源。在处理大量数据或进行高性能文件 I/O 操作时,推荐使用 bufio 和 io 库提供的流式读写方式以提高效率。
小结
Go 语言文件处理具有以下特点,总结一下。
-
简洁的API设计:
Go 语言的标准库os提供了一系列简单直接的函数用于文件操作,如Open、Create、Read、Write、Close等,使得文件系统的交互直观易懂。 -
零值安全:
Go 语言的文件操作遵循其零值安全的设计理念,如果尝试对未打开的文件执行读写操作,编译器不会通过编译,而在运行时也会抛出异常,强制开发者合理地管理文件状态。 -
错误处理:
Go 语言强调错误处理的重要性,所有的文件操作都可能会返回一个错误,要求开发者明确地处理这些潜在的错误情况,从而避免因文件操作失败导致的问题。 -
可读性强:
Go 语言鼓励简洁的代码风格,通过上下文感知的defer语句,可以确保文件在操作完成后会被正确关闭,即使在发生错误的情况下也能保证资源的释放。 -
异步I/O支持:
虽然标准库中的文件操作通常是同步的,但 Go 也提供了如io/ioutil包的一些便捷函数,以及io.Pipe和io.Copy等可用于构建异步文件处理流水线的方法。 -
操作系统无关性:
Go 语言的文件系统 API 设计为高度可移植的,可以在多种操作系统上正常工作,只需根据目标平台调用适当的函数即可,无需关心底层细节。 -
文件权限管理:
Go 语言提供了设置和修改文件权限的函数,如os.Chmod,能够确保文件安全性,符合不同场景下的权限需求。 -
目录操作支持:
不仅支持文件操作,还提供了诸如创建、删除、遍历目录等功能,便于进行更复杂的文件系统管理。 -
高效内存管理:
通过bufio包可以实现高效的文件读写,减少内存分配次数,提升大规模文件操作的性能。
总结来说,Go 语言在文件处理方面结合了简单的接口设计、严格的错误处理机制和良好的跨平台兼容性,同时还考虑到了资源管理、性能优化等实用需求,非常适合进行各种复杂程度的文件系统操作。
相关文章:
编程笔记 Golang基础 042 文件处理
编程笔记 Golang基础 042 文件处理 一、文件处理二、Go语言文件处理创建文件和写入内容打开文件并按模式读写读取文件内容更高级的文件和IO操作改变文件权限目录操作 小结 一、文件处理 文件处理是指在计算机科学中,对存储在磁盘或其他持久性存储介质上的文件进行的…...
linuxlsof详解
lsof 是 List Open File 的缩写, 它主要用来获取被进程打开文件的信息,我们都知道,在Linux中,一切皆文件,lsof命令可以查看所有已经打开了的文件,比如: 普通文件,目录,特殊的块文件,…...
学习JAVA的第十二天(基础)
目录 算法 查找算法 基本查找(顺序查找) 二分查找(折半查找) 分块查找 排序算法 冒泡排序 选择排序 插入排序 快速排序 递归算法 算法 算法(Algorithm)是指解题方案的准确而完整的描述ÿ…...
Vector集合源码分析
Vector集合源码分析 文章目录 Vector集合源码分析一、字段分析二、方法分析三、总结 内容如有错误或者其他需要注意的知识点,欢迎指正或者探讨补充,共同进步。 一、字段分析 //用于存储该集合中的所有数据对象,所以是基于数组实现的 protec…...
Unity引擎中光源都有哪几种,都有什么作用
本文由 简悦 SimpRead 转码, 原文地址 mp.weixin.qq.com Unity 引擎为了实现游戏场景的明暗和光影效果,提供了四种类型的光源,分别是方向光(Directional Lights)、点光源(Point Lights)、聚光灯…...
C语言中结构体成员访问操作符的含义及其用法
1.直接访问操作符 用法:结构体名.成员名。 含义:直接访问结构体中的成员变量。 示例: #include<stdio.h> struct student {char name[20];int age; }; int main() {//定义了一个结构体数组arrstruct student arr[4] { {"cxk&q…...
Kubeadmin方式部署Calico网络模式的K8s集群
目录 1.环境准备 2.配置内核参数 3.配置ntp时间服务器 4.配置持久化日志目录 5.升级物理机内核 6.配置ipvs服务 7.安装docker 8.安装kubeadm、kubectl、kubelet 9.导入k8s组件基础镜像 10.k8s初始化配置 11.配置calico网络 12.完成部署 1.环境准备 ###方案中涉及的…...
sparse transformer 常见稀疏注意力
参考: https://zhuanlan.zhihu.com/p/259591644 主要就是降低transformer自注意力模块的复杂度 复杂度主要就是 Q K^T影响的,稀疏注意力就是在Q点乘K的转置这模块做文章 下列式一些sparse transformer稀疏注意力方法 a、transformer原始的 ࿰…...
力扣 第 125 场双周赛 解题报告 | 珂学家 | 树形DP + 组合数学
前言 整体评价 T4感觉有简单的方法,无奈树形DP一条路上走到黑了,这场还是有难度的。 T1. 超过阈值的最少操作数 I 思路: 模拟 class Solution {public int minOperations(int[] nums, int k) {return (int)Arrays.stream(nums).filter(x -> x <…...
基于springboot+vue的人格障碍诊断系统
博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战,欢迎高校老师\讲师\同行交流合作 主要内容:毕业设计(Javaweb项目|小程序|Pyt…...
Go-知识struct
Go-知识struct 1. struct 的定义1.1 定义字段1.2 定义方法 2. struct的复用3. 方法受体4. 字段标签4.1 Tag是Struct的一部分4.2 Tag 的约定4.3 Tag 的获取 githupio地址:https://a18792721831.github.io/ 1. struct 的定义 Go 语言的struct与Java中的class类似&am…...
SpringMVC 学习(十一)之数据校验
目录 1 数据校验介绍 2 普通校验 3 分组校验 4 参考文档 1 数据校验介绍 在实际的项目中,一般会有两种校验数据的方式:客户端校验和服务端校验 客户端校验:这种校验一般是在前端页面使用 JS 代码进行校验,主要是验证输入数据…...
软考55-上午题-【数据库】-数据库设计步骤1
一、数据库设计的步骤 新奥尔良法,四个主要阶段: 1、用户需求分析:手机用户需求,确定系统边界; 2、概念设计(概念结构设计):是抽象概念模型,较理想的是采用E-R方法。 …...
速盾:使用cdn后速度慢是怎么回事?
CDN(内容分发网络)是一种通过将网站的静态内容分布到全球各地的服务器,从而提供更快速度和更好用户体验的技术。然而,有时候用户会遇到使用CDN后速度变慢的问题,下面将探讨几种可能的原因。 服务器选择错误: CDN服务通…...
考研复试类比社团招新,无所谓“公平”,导师选谁都是他的权力
这篇文章是抖音和b站上上传的同名视频的原文稿件,感兴趣的csdn用户可以关注我的抖音和b站账号(GeekPower极客力量)。同时这篇文章也为视频观众提供方便,可以更加冷静地分析和思考。文章同时在知乎发表。 我考研一战的时候计算机考…...
阿里面试,有点焦虑。。
恭喜发现宝藏!搜索公众号【TechGuide】回复公司名,解锁更多新鲜好文和互联网大厂的笔经面经,目前已更新至美团、字节… 作者TechGuide【全网同名】 聊聊春招 春招来了,有些24届校招生可能还在做最后的努力,有些25届的…...
24计算机考研调剂 | 石家庄铁道大学
01石家庄铁道大学 智慧交通研究室招少量调剂学术型硕士(数一英一320分以上工科专业) 考研调剂招生信息 学校:石家庄铁道大学 专业:工学->计算机科学与技术->计算机应用技术 工学->测绘科学与技术->地图制图学与地理信息工程 工学->交…...
勇敢尝鲜之Springboot3大坑-集成Mybatisplus报错:ddlApplicationRunner
🌹作者主页:青花锁 🌹简介:Java领域优质创作者🏆、Java微服务架构公号作者😄 🌹简历模板、学习资料、面试题库、技术互助 🌹文末获取联系方式 📝 往期热门专栏回顾 专栏…...
linux高级编程:线程(二)、进程间的通信方式
线程: 回顾线程(一): 1.线程间通信问题 线程间共享同一个资源(临界资源) 互斥: 排他性访问 linux系统 -- 提供了Posix标准的函数库 -- 互斥量(互斥锁) 原子操作&#x…...
Unity 佳能SDK 及数据获取
1. 填写信息跟官方申请SDK,大概1-2个工作日会邮件回复你 佳能(中国)- 佳定制(佳能影像产品),SDK,EDSDK,CCAPI,软件开发包下载 2. 将SDK这两个文件放到 Unity Plugins文件夹 3. 把CameraControl 下面只要是绿色的 .cs 文件都复制到Unity 中...
wordpress后台更新后 前端没变化的解决方法
使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…...
(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility
Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...
基于数字孪生的水厂可视化平台建设:架构与实践
分享大纲: 1、数字孪生水厂可视化平台建设背景 2、数字孪生水厂可视化平台建设架构 3、数字孪生水厂可视化平台建设成效 近几年,数字孪生水厂的建设开展的如火如荼。作为提升水厂管理效率、优化资源的调度手段,基于数字孪生的水厂可视化平台的…...
【HTTP三个基础问题】
面试官您好!HTTP是超文本传输协议,是互联网上客户端和服务器之间传输超文本数据(比如文字、图片、音频、视频等)的核心协议,当前互联网应用最广泛的版本是HTTP1.1,它基于经典的C/S模型,也就是客…...
Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)
船舶制造装配管理现状:装配工作依赖人工经验,装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书,但在实际执行中,工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...
保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek
文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama(有网络的电脑)2.2.3 安装Ollama(无网络的电脑)2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...
【分享】推荐一些办公小工具
1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由:大部分的转换软件需要收费,要么功能不齐全,而开会员又用不了几次浪费钱,借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...
