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的三大特性,封装、继承、多态; 效果展示:

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

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

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

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

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

背景 使用Agent采集追踪数据的时候,想排除某些路径,比如健康检查等,这样可以减少上报的数据,也可以去除一些不必要的干扰数据。 加载插件 在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 …

全局异常处理器

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

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

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

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

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

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

什么是 RAG LLM 会产生误导性的 “幻觉”,依赖的信息可能过时,处理特定知识时效率不高,缺乏专业领域的深度洞察,同时在推理能力上也有所欠缺。 正是在这样的背景下,检索增强生成技术(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 应届生面试指南 网络安全面…

如何利用智能家居打造一个“会呼吸的家”?一体化电动窗帘

如何利用智能家居打造一个“会呼吸的家”&#xff1f;一体化电动窗帘 史新华 隐藏式一体化智能电动窗帘与市面上其他窗帘不同的是&#xff0c;电机内置于轨道之中&#xff0c;一体化&#xff0c;美观、安静、滑动顺畅。 每次都会自动打开和关闭&#xff0c;相当漂亮。 众多家庭…

javaWeb项目-ssm+vue在线购物系统功能介绍

本项目源码&#xff1a;java-ssmvue在线购物系统的设计与实现源码说明文档资料资源-CSDN文库 项目关键技术 开发工具&#xff1a;IDEA 、Eclipse 编程语言: Java 数据库: MySQL5.7 框架&#xff1a;ssm、Springboot 前端&#xff1a;Vue、ElementUI 关键技术&#xff1a;sprin…

网络基础OSI国际互联

这里所指的网络是计算机网络&#xff0c;由许许多多的不同的网络设备以及电子设备构建的一个ip的网络&#xff0c;这个就是工作对象 网络是随着计算机的出现&#xff0c;军事沟通 出现的问题&#xff1a;物理层设备&#xff0c;总线&#xff0c;共享设备&#xff0c;会产生冲突…

【前端速通系列|第一篇】ES6核心语法

文章目录 1.ES6简介2.let和const3.解构4.链判断5.参数默认值6.箭头函数7.模板字符串8.Promise9.Async函数10.Await关键字11.模块化 1.ES6简介 ES6 是 ECMAScript 2015 的缩写&#xff0c;是 ECMAScript 语言标准的第6个版本。ECMAScript 是 JavaScript 语言的国际标准化组织制…

jpg图片下载后如何转换格式?方法揭秘(全)

在互联网浏览中&#xff0c;我们经常下载到各种各样的图片文件&#xff0c;而JPEG&#xff08;JPG&#xff09;是其中一种常见的格式。尽管JPEG在保持图像质量的同时能够有效地压缩文件大小&#xff0c;但有时我们可能需要将下载的JPEG图片转换为其他格式&#xff0c;以满足不同…

Python基于 Jupyter Notebook 的图形可视化工具库之ipysigma使用详解

概要 在数据科学和网络分析中,图(Graph)结构是一种常用的数据结构,用于表示实体及其关系。为了方便图数据的可视化和交互操作,ipysigma 提供了一个基于 Jupyter Notebook 的图形可视化工具。通过 ipysigma,用户可以在 Jupyter Notebook 中创建、编辑和展示图结构,方便进…

流体性能测试实验室建设需求参考

在第一次提需求的时候&#xff0c;很多人感到很迷茫&#xff0c;这里以某流体实验室建设为例&#xff0c;进行说明&#xff0c;希望抛砖引玉&#xff0c;能起到一点参考作用。 一、项目概述 学校拟建一座流体性能测试实验室&#xff0c;旨在兼顾教学和企业科研能力。实验室需…