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

Go语言---文件分类、设备文件、磁盘文件、实现打开/写/读/关闭/拷贝文件

设备文件:
屏幕(标准输出设备) fmt.Println()往标准输出设备写内容
键盘(标准输入设备) fmt.Scan()从标准输入设备读取内容

磁盘文件,放在存储设备上的文件
文本文件:以记事本打开,能看到内容(不是乱码)
二进制文件:以记事本打开,能看到内容:(是乱码)

为什么需要文件?内存掉电丢失,程序结束,内存中的内容消失,文件放磁盘,程序结束,文件还是存在。

建立与打开文件

新建文件有两种方法:

create

func Create (name string) (file *File,err Error)

根据提供的文件名创建新的文件,返回一个文件对象,默认权限是0666的文件,返回的文件象是可读写的。如果文件存在,它会清空文件。

NewFile

func NewFile (fd uintptr,name string) *File

根据文件描述符创建相应的文件,返回一个文件对象

打开文件有两种方法

Open

func Open (name string) (file *File,err Error)

该方法打开一个名称为 name 的文件,但是是只读方式,内部实现其实调用了 OpenFile

OpenFile

func OpenFile (name string,flag int,perm uint32) (file *File,err Error)

打开名称为 name 的文件,flag 是打开的方式,只读、读写等,perm是权限。不论是Create还是Open最终都会调用OpenFile
在这里插入图片描述
在这里插入图片描述

写文件

Write

func (file *File) Write(b []byte) (n int,err Error)

写入 byte 类型的信息到文件,以切片的方式,可以处理二进制或者非二进制

WriteAt

func (file *File) WriteAt(b []byte,off int64) (n int,err Error)

从指定位置开始写入 byte 类型的信息到文件

WriteString

func (file *File) WriteString(s string) (ret int,err Error)

写入string类型的信息到文件

读文件

Read

func (file *File) Read(b []byte) (n int,err Error)

读取数据到b中

ReadAt

func (file *File) ReadAt(b []byte,off int64) (n int,err Error)

从指定位置off开始读取数据到b中

删除文件

Remove

func Remove(name string) Error

调用该函数就可以删除文件名为name的文件

标准设备文件,默认打开,用户可以直接使用

可以调用os.Stdout.Close()将输出设备关闭

在这里插入图片描述
os.Stdout.Close()将其关闭后将无法输出

可以调用os.Stdin.Close()将输入设备关闭

在这里插入图片描述

  • 关闭后无法输入

实现写文件

在这里插入图片描述

  • 创建一个文件Create
  • 写数据WriteString
  • 关闭文件,defer在函数结束之前关闭文件Close

实现读文件

*

  • 打开文件Open
  • 读文件Read按指定的大小来读
  • 关闭文件Close

一行一行读

在这里插入图片描述
在这里插入图片描述

  • buf, err := r.ReadBytes('\n')代表着遇到’\n’结束读取,但是\n也会读取进去
    在这里插入图片描述

实现拷贝文件

package mainimport ("fmt""io""os"
)func main() {list := os.Argsif len(list) != 3 {fmt.Println("usage:xxx srcFile dstTile")return}srcFileName := list[1]dstFileName := list[2]if srcFileName == dstFileName {fmt.Println("源文件和目的文件不能相同")return}//只读方式打开sF, err1 := os.Open(srcFileName)if err1 != nil {fmt.Println("err1=", err1)return}//新建目的文件dF, err2 := os.Create(dstFileName)if err2 != nil {fmt.Println("err2=", err2)return}defer sF.Close()defer dF.Close()buf := make([]byte, 4*1024)for {n, err := sF.Read(buf)if err != nil {if err == io.EOF {//文件结束break}fmt.Println("err=", err)}//往目的文件写 读多少写多少dF.Write(buf[:n])}}

在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 20.js获取页面卷去的距离以及滚到到指定位置
  • LLaMA Pro:具有块扩展的渐进式 LLaMA[论文翻译]增量预训练 扩展transformer块
  • AI网络爬虫022:批量下载某个网页中的全部链接
  • 计算环形链表,环的长度
  • vb.netcad二开自学笔记1:万里长征第一步Hello CAD!
  • Kotlin Class
  • MQTT是什么,物联网
  • 微信小程序中wx.navigateBack()页面栈返回上一页时执行上一页的方法或修改上一页的data属性值
  • 【Sql Server修改列类型错误信息:对象名依赖于列】
  • Python从Excel表中查找指定数据填入新表
  • 对controller层进行深入学习
  • iOS 开发中,异步渲染和异步绘制
  • C++ | Leetcode C++题解之第225题用队列实现栈
  • java-数据库的作用
  • 记录Linux安装go环境的一个坑
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • 2017前端实习生面试总结
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • eclipse(luna)创建web工程
  • HTTP--网络协议分层,http历史(二)
  • Laravel深入学习6 - 应用体系结构:解耦事件处理器
  • linux安装openssl、swoole等扩展的具体步骤
  • php ci框架整合银盛支付
  • Redis中的lru算法实现
  • Theano - 导数
  • uni-app项目数字滚动
  • ⭐ Unity 开发bug —— 打包后shader失效或者bug (我这里用Shader做两张图片的合并发现了问题)
  • 第三十一到第三十三天:我是精明的小卖家(一)
  • 对象引论
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 如何正确配置 Ubuntu 14.04 服务器?
  • 听说你叫Java(二)–Servlet请求
  • 小程序滚动组件,左边导航栏与右边内容联动效果实现
  • 优秀架构师必须掌握的架构思维
  • 在weex里面使用chart图表
  • ​sqlite3 --- SQLite 数据库 DB-API 2.0 接口模块​
  • ​如何使用ArcGIS Pro制作渐变河流效果
  • #14vue3生成表单并跳转到外部地址的方式
  • #systemverilog# 之 event region 和 timeslot 仿真调度(十)高层次视角看仿真调度事件的发生
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • (2022 CVPR) Unbiased Teacher v2
  • (3)(3.5) 遥测无线电区域条例
  • (C)一些题4
  • (day18) leetcode 204.计数质数
  • (DenseNet)Densely Connected Convolutional Networks--Gao Huang
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (web自动化测试+python)1
  • (附源码)python旅游推荐系统 毕业设计 250623
  • (附源码)springboot高校宿舍交电费系统 毕业设计031552
  • (推荐)叮当——中文语音对话机器人
  • (转)Scala的“=”符号简介
  • **PHP分步表单提交思路(分页表单提交)
  • .NET I/O 学习笔记:对文件和目录进行解压缩操作
  • .NET MAUI学习笔记——2.构建第一个程序_初级篇