21.1 文件-文件的重要性、ioutil包

1. 文件的重要性

文件的本质就是硬盘中的数据,包括各种程序、文档、多媒体甚至系统配置。

各种类UNIX操作系统的一个重要特征就是将一切皆视为文件。

  • 可以象访问文件一样访问键盘、打印机等硬件设备
  • 可以象访问文件一样访问管道、套接字等内核资源

各种类UNIX操作系统甚至可以通过虚拟文件来暴露系统信息。

  • 执行cat /proc/loadavg命令,可以查看系统的当前负载信息
    • 1.75 0.87 0.34 1/701 2348
  • 执行watch cat /proc/loadavg命令,可以2秒为周期,动态显式系统负载的实时视图。
    • Every 2.0s: cat /proc/loadavg
      1.32 0.33 0.11 1/869 3245
  •  事实上,loadavg并不是真正的磁盘文件,其本质是虚拟文件形式表现的内核信息。

2. ioutil包(读取/创建文件)

Go语言标准库通过os包实现对文件系统的基本访问,并在此基础上做了更高级的封装,以io/ioutil包的形式简化读写文件的过程,其中包括自动化清理。

  • 通过ioutil包读取文件、创建文件、写入文件、创建临时文件、创建临时目录、列出目录内容,等等

(一)读取文件

io/ioutil包的ReadFile函数接受文件路径作为参数,读取文件的内容,并以字节切片的形式返回。要将文件内容作为字符串处理,可对其显式类型转换

  • fileBytes, err := ioutil.ReadFile("./main.go")
  • fileString := string(fileBytes) // 如果文件本身是文本文件的话,可以显示转化为字符串,进而获取其中内容。

注意只有文本文件的内容才能被当作字符串处理。很多文件,比如:可执行程序文件、图像文件、音视频文件等,都属于二进制文件。一些经过压缩和加密处理的文本文件也是二进制文件。这些文件的内容都不能转换为字符串。

// 读取文件
// ioutil包的ReadFile函数接受一个文件路径 
// 作为参数,并以字节切片的形式返回文件内容
// 字节切片 = ioutil.ReadFile(文件路径) 
package main
import ("fmt""io/ioutil""log"
)
func main() {// 读取main.go文件fileBytes, err := ioutil.ReadFile("./main.go")if err != nil {log.Fatal(err)}fileString := string(fileBytes)fmt.Println(fileString)
}
// 打印输出:
// ioutil包的ReadFile函数接受一个文件路径作为参数,并以字节切片的形式返回文
// 件内容字节切片 = ioutil.ReadFile(文件路径)package mainimport ("fmt""io/ioutil""log")func main() {fileBytes, err := ioutil.ReadFile("./main.go")if err != nil {log.Fatal(err)}fileString := string(fileBytes)fmt.Println(fileString)}

(二)创建文件

io/ioutil包的WriteFile函数可用于创建新文件。该函数接受文件路径写入数据文件权限三个参数。如果文件路径所表示的文件并不存在,但其所属目录存在且写入数据为nil,该函数将按照给定的路径和权限创建一个空文件。

  • err := ioutil.WriteFile("./file.txt", nil, 0644)

文件权限用三位八进制数表示:0UGO

  • U、G、O分别表示拥有者用户的权限、拥有组用户的权限、其它用户的权限。
  • 每种权限用421三个数中的部分或全部相加求和得到。
  • 4、2、1这三个数分别表示可读可写可执行。
  • 例如:某文件的权限是0764,其字符串形式是rwxrw-r--
    • 拥有者用户可读可写可执行:7=4+2+1
    • 拥有组用户可读写不可执行:6=4+2
    • 其它用户只读不可写和执行:4=4

 

// 创建文件
// ioutil包WriteFile函数的本意是将数据写入文件,
// 但在被写入文件并不存在的情况下也会先创建文件 
// ioutil.WriteFile(文件路径, 被写入数据, 文件权限)
//
// 其中文件权限用三位八进制数表示:0UGO
// U - 拥有者用户的权限
// G - 拥有组用户的权限
// O - 其它用户的权限 
//
// 其中每一种权限用4、2、1三个数中的部分或全
// 部相加求和得到,分别表示可读、可写、可执行
//
//  0 7 6 4 -rwxrw-r--
//    | | |
//   | | +------- 4 - 其它用户只读
//  | +----- 4+2 - 拥有组用户可读可写
// +--- 4+2+1 - 拥有者用户可读可写可执行 
package mainimport ("io/ioutil""log"
)func main() {err := ioutil.WriteFile("./file.txt", nil, 0644)if err != nil {log.Fatal(err)}
}

3. 写入文件

io/ioutil包的WriteFile函数也可用于写入文件。需要写入的内容可通过该函数的第二个参数字节切片的形式传入。

  • err := ioutil.WriteFile("./file.txt", fileBytes, 0644)

如果需要写入文件的内容是字符串,则需要先将其转换为字节切片。

  • fileString := "Hello World!"
    fileBytes := []byte(fileString) // 转换为字节切片

注意,通过io/ioutil包的WriteFile函数向文件写入数据:

  • 如果被写入文件已存在,则先清空原有内容再写入新内容,文件权限参数不起作用。

如果被写入文件不存在,则按照给定的文件权限创建一个新文件,然后再写入数据。

// 写入文件
// ioutil包WriteFile函数的本意是将数据写入文件,
// 但在被写入文件并不存在的情况下也会先创建文件
// ioutil.WriteFile(文件路径, 被写入数据, 文件权限) 
// 其中被写入数据采用字节切片的形式传入
package main
import ("io/ioutil""log"
)
func main() {fileString := "Hello World!"fileBytes := []byte(fileString)err := ioutil.WriteFile("./file.txt", fileBytes, 0644)if err != nil {log.Fatal(err)}fileBytes, err := ioutil.ReadFile("./file.txt")if err != nil {log.Fatal(err)}fileString := string(fileBytes)fmt.Println(fileString)
}
// 打印输出:
Hello World!

 

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

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

相关文章

从 Solana 课程顺利毕业获得高潜岗位,他的 Web3 开发探险之旅

在 TinTinLand 的学习,给了我入门 Web3 行业的 Entry Ticket,我认为这张 Ticket 是非常宝贵和重要的。 Alex,一位从某家知名研究所毅然辞职,踏入Web3世界的年轻开发者,凭借在 TinTinLand 推出的「Solana 黑客松先锋训练…

超级马里奥-小游戏

学习目标: 练习Java面向对象的编程思想; 巩固Java语言基础,数据类型、集合、数组等; 深刻理解Java的三大特性,封装、继承、多态; 效果展示:

标准盒模型和怪异盒模型的区别

CSS盒模型: 内容区(content)内边距(padding)边框(border)外边距(margin) 分为标准盒模型和IE盒模型/怪异盒模型 为了正确设置元素在所有浏览器中的宽度和高度&#xf…

【星海出品】Linux大文件处理

在未生成大文件之前最好使用专门的日志管理工具(如logrotate)来管理日志文件的滚动和备份。这些工具通常具有更好的性能和更高的可靠性。 文件可以同时被写入和读取,在并发读写同一个文件时,可能会遇到性能瓶颈或竞争条件 用户 -…

人工智能入门学习教程分享

目录 1.首先安装python,官网地址:Download Python | Python.org,进入网址,点击Windows链接 2.下载完成之后,进行傻瓜式安装,如果不选安装路径,默认会安装到C:\Users\Administrator\AppData\Local\Programs\Python\Python38目录下。 3.配置python环境变量,即把python的…

vue3打字机效果

简易明了&#xff0c;需要的小伙伴直接走起&#xff01; <template><div><div><p>{{ text }}</p></div></div> </template><script setup> import { onMounted, ref } from "vue";const shuzu ref("欢…

《思考总结》

思考总结 ==标题==:卷积操作的作用1. **特征提取**2. **参数共享**3. **降维和数据压缩**4. **提升计算效率**5. **平滑和去噪**卷积操作示例输入图像卷积核卷积过程总结==标题==:上卷积什么是上卷积(反卷积/转置卷积)上卷积的作用上卷积的实现1. **最近邻插值(Nearest Ne…

AI大模型时代:一线大厂为何竞相高薪招揽AI产品经理?

前言 在当今日新月异的科技浪潮中&#xff0c;人工智能&#xff08;AI&#xff09;技术已经渗透至各行各业&#xff0c;成为推动社会进步的重要力量。在这样的背景下&#xff0c;AI产品经理这一新兴职位逐渐崭露头角&#xff0c;成为各大企业竞相争夺的稀缺人才。那么&#xf…

【SkyWalking】启用apm-trace-ignore-plugin追踪忽略插件

背景 使用Agent采集追踪数据的时候&#xff0c;想排除某些路径&#xff0c;比如健康检查等&#xff0c;这样可以减少上报的数据&#xff0c;也可以去除一些不必要的干扰数据。 加载插件 在agent/optional-plugins目录中有个apm-trace-ignore-plugin-${version}.jar插件&…

【电机控制】FOC算法验证步骤——PWM、ADC

【电机控制】FOC算法验证步骤 文章目录 前言一、PWM——不接电机1、PWMA-H-50%2、PWMB-H-25%3、PWMC-H-0%4、PWMA-L-50%5、PWMB-L-75%6、PWMC-L-100% 二、ADC——不接电机1.电流零点稳定性、ADC读取的OFFSET2.电流钳准备3.运放电路分析1.电路OFFSET2.AOP3.采样电路的采样值范围…

HCIA 15 AC+FIT AP结构WLAN基础网络

本例配置AC+FIT,即瘦AP+AC组网。生活中家庭上网路由器是胖AP,相当于AC+FIT二合一集成到一个设备上。 1.实验介绍及拓扑 某企业网络需要用户通过 WLAN 接入网络,以满足移动办公的最基本需求。 1. AC 采用旁挂核心组网方式,AC 与AP 处于同一个二层网络。 2. AC 作为DHCP …

全局异常处理器

后端&#xff1a; 全局异常处理器的作用&#xff1a; 当我们在项目中碰到很多不同的异常情况时&#xff0c;我们需要去处理异常 不过我们不可能每个异常都用try/catch&#xff0c;那样很不优雅 所以我们可以用这个全局异常处理器&#xff0c;来优雅的处理异常 这个全局异常…

数组中的map方法

JavaScript中的map()方法详解 map()方法经常拿来遍历数组&#xff0c;但是不改变原数组&#xff0c;但是会返回一个新的数组&#xff0c;并且这个新的数组不会改变原数组的长度 注意&#xff1a;有时候会出现这种现象&#xff0c;出现几个undefined const array [1, 4,9, 16…

数字人系统源码开发攻略,小白也能轻松上手的部署方案来了!

随着数字人应用场景的不断拓展&#xff0c;数字人广阔的应用前景和庞大的市场需求逐渐展现在人们眼前。但是&#xff0c;由于专业背景的缺乏&#xff0c;许多想要开发数字人系统的创业者们都只能被迫成为旁观他人瓜分这块大蛋糕。在此背景下&#xff0c;各式各样的数字人系统源…

[论文笔记]Query Rewriting for Retrieval-Augmented Large Language Models

引言 今天带来论文Query Rewriting for Retrieval-Augmented Large Language Models的笔记。 本篇工作从查询重写的角度介绍了一种新的框架&#xff0c;即重写-检索-阅读&#xff0c;而不是以前的检索-阅读方式&#xff0c;用于检索增强的LLM。关注的是搜索查询本身的适应性&…

检索增强生成(RAG)实践:基于LlamaIndex和Qwen1.5搭建智能问答系统

什么是 RAG LLM 会产生误导性的 “幻觉”&#xff0c;依赖的信息可能过时&#xff0c;处理特定知识时效率不高&#xff0c;缺乏专业领域的深度洞察&#xff0c;同时在推理能力上也有所欠缺。 正是在这样的背景下&#xff0c;检索增强生成技术&#xff08;Retrieval-Augmented…

[Python学习篇] Python循环语句

while 循环 语法&#xff1a; while 条件: 条件成立后会重复执行的代码 ...... 示例1&#xff1a;死循环 # 这是一个死循环示例 while True:print("我正在重复执行")示例2&#xff1a;循环指定次数 i 1 while i < 5:print(f"执行次数 {i}")…

学了这篇面试经,轻松收割网络安全的offer

网络安全面试库 吉祥学安全知识星球&#x1f517;除了包含技术干货&#xff1a;Java代码审计、web安全、应急响应等&#xff0c;还包含了安全中常见的售前护网案例、售前方案、ppt等&#xff0c;同时也有面向学生的网络安全面试、护网面试等。 0x1 应届生面试指南 网络安全面…

Sheila Teo分享GPT-4提示工程竞赛胜利经验,DynamiCrafter工具实现图转超逼真动态视频

一支烟花官网&#xff1a; https://agifun.love 智源社区 我是如何赢得GPT-4提示工程大赛冠军的 Datawhale干货作者&#xff1a;Sheila Teo&#xff0c;来源&#xff1a;机器之心去年 11 月 8 日&#xff0c;新加坡政府科技局&#xff08;GovTech&#xff09;组织举办了首届…

ISO七层模型 tcp/ip

OSI七层模型&#xff08;重点例子&#xff09; OSI&#xff08;Open Systems Interconnection&#xff09;模型&#xff0c;也称为开放系统互连模型&#xff0c;是一个理论模型&#xff0c;由国际标准化组织&#xff08;ISO&#xff09;制定&#xff0c;用于描述和理解不同网络…