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

2024-06-15 04:52
文章标签 重要性 21.1 ioutil

本文主要是介绍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!

 

这篇关于21.1 文件-文件的重要性、ioutil包的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1062472

相关文章

可测试,可维护,可移植:上位机软件分层设计的重要性

互联网中,软件工程师岗位会分前端工程师,后端工程师。这是由于互联网软件规模庞大,从业人员众多。前后端分别根据各自需求发展不一样的技术栈。那么上位机软件呢?它规模小,通常一个人就能开发一个项目。它还有必要分前后端吗? 有必要。本文从三个方面论述。分别是可测试,可维护,可移植。 可测试 软件黑盒测试更普遍,但很难覆盖所有应用场景。于是有了接口测试、模块化测试以及单元测试。都是通过降低测试对象

临床基础两手抓!这个12+神经网络模型太贪了,免疫治疗预测、通路重要性、基因重要性、通路交互作用性全部拿下!

生信碱移 IRnet介绍 用于预测病人免疫治疗反应类型的生物过程嵌入神经网络,提供通路、通路交互、基因重要性的多重可解释性评估。 临床实践中常常遇到许多复杂的问题,常见的两种是: 二分类或多分类:预测患者对治疗有无耐受(二分类)、判断患者的疾病分级(多分类); 连续数值的预测:预测癌症病人的风险、预测患者的白细胞数值水平; 尽管传统的机器学习提供了高效的建模预测与初步的特征重

DTO类实现Serializable接口的重要性

所谓序列化,简单一点理解,就是将对象转换成字节数组,反序列化是将字节数组恢复为对象。凡是要在网络上传输的对象、要写入文件的对象、要保存到数据库中的对象都要进行序列化。Java对象是无法直接保存到文件中,或是存入数据库中的。如果要保存到文件中,或是存入数据库中,就要将对象序列化,即转换为字节数组才能保存到文件中或是数据库中。文件或者数据库中的字节数组拿出来之后要转换为对象才能被我们识别,即反序列化。

HDU2523(论scanf的重要性)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2523 解题思路: 先把a数组排个序,然后把| xi - xj |的所有组合值求出来,把b数组在排个序。这时候要考虑出现1、1、1、2、2、3这种相邻两个一样的情况,开一个vis标记数组把相邻的数进行合并,这样就可以顺利取到第k大的值。 特别说明,论scanf和printf的重要性,用cin

论互联网安全的重要性

论互联网安全的重要性 当今,计算机领域什么最火?当属人工智能了,纵观各大IT巨头google,facebook,apple,Baidu都有自己的人工智能实验室,google有谷歌大脑,其主要计划是研究当今最顶级的技术,比如无人驾驶汽车,google眼镜,百度成立IDL深度研究院等等。这是不是代表,未来我们的生活将因人工智能的发展而发生巨大变化?我想是的。人工智能要基于海量数据处理,这些数据包含大

高精度治具加工的重要性和创新性

在现代制造业中,高精度治具加工扮演着至关重要的角色。它不仅是生产过程中的关键环节,更是推动行业不断创新和发展的重要力量。时利和将解析高精度治具加工的重要性和创新性。   一、高精度治具加工的重要性   1.确保产品质量   高精度治具能够为生产过程提供准确的定位、夹紧和导向功能,从而确保产品的尺寸精度、形状精度和表面质量。例如,在电子制造领域,高精度的治具可以保证芯片的精确安装,提高电子

软件兼容性测试重要性,第三方软件测试服务公司的测试流程

在当今的软件开发及使用环境中,软件兼容性测试作为一个关键的环节,越来越受到重视。随着各种操作系统、硬件与软件环境的多样化,如何确保软件的兼容性,成为我们需要深入探讨的重要话题。卓码软件测评,作为专业的第三方软件测试服务公司,深知其中的重要性,并在这一领域提供了全面的解决方案。 一、什么是软件兼容性测试?   软件兼容性测试是指在不同的操作系统、浏览器、设备和网络环境中,对软件进行测试,确保其能够

数据库中的“加速器”:深度解析索引的重要性及最佳实践

文章目录 **为什么要使用索引?****索引的作用:** **索引的分类****1. 按索引字段的个数分类****2. 按照索引值的唯一性分类** **如何定义索引?****1. 创建索引****语句中的关键要素:****创建索引的示例:** **2. 删除索引** **创建索引的最佳实践****创建索引的原则:** **总结** 在数据库系统中,索引就像书中的目录一样,是提升查

语言质量评估对欧洲游戏推广的重要性

语言质量评估在欧洲推广游戏中的重要性怎么强调都不为过。欧洲是一个文化和语言多样化的市场,整个大陆有200多种语言。因此,要提供一款与不同地区玩家产生共鸣的本地化游戏,不仅需要准确的翻译,还需要细致的语言质量评估。这一过程对于确保游戏吸引当地观众、保持其初衷并提供无缝和身临其境的体验至关重要。 语言质量评估包括评估翻译内容的准确性、流畅性和文化相关性。对于瞄准欧洲市场的游戏开发商和发行商来说,

产品需求过程管理重要性

产品需求过程管理重要性 背景     以下都是真实事项经历回顾,在产品开发过程中,产品经理与研发团队之间的沟通至关重要。然而,沟通不畅或信息缺失常常导致需求无法准确传达,最终影响产品的成功。以下是一些常见的问题:    1.需求逻辑与需求规则遗忘     产品经理在与研发工程师确认某个需求逻辑后,未能有效文字书面记录背景信息与详细逻辑规则。在后续开发中,产品经理可能无法回忆起当初的