Create创建文件:

os.Create:文件不存在则创建,文件存在则删除文件中的内容

语法:

file:创建文件的指针
err:创建文件出现异常后的信息file, err := os.Create("创建文件存放的路径")

演示:

func CreateFile() {file, err := os.Create("/Users/itzhuzhu/Desktop/filetest/CreateFile")if err != nil {fmt.Println(err)}// 关流(不关流会长时间占用内存)defer file.Close()
}

写入数据:

使用WriteString写数据:

WriteString底层也是调用的Write,但是Write需要转换字节数组,比较麻烦,WriteString不需要手动转换,比较方便

func FileWriteString() {// 创建文件file, err := os.Create("/Users/itzhuzhu/Desktop/filetest/CreateFile")if err != nil {fmt.Println(err)}defer file.Close()// WriteString写数据,返回值参数1是写的字符长度,参数2是异常信息len, err := file.WriteString("WriteString写入的数据")if err != nil {fmt.Println(err)}fmt.Println(len)
}

使用Write写数据:

func FileWrite() {// 创建文件file, err := os.Create("/Users/itzhuzhu/Desktop/filetest/CreateFile")if err != nil {fmt.Println(err)}defer file.Close()// Write写数据,返回值参数1是写的字符长度,参数2是异常信息str := "Write写入的数据"len, err := file.Write([]byte(str)) //将字符串转换成字节切片if err != nil {fmt.Println(err)}fmt.Println(len)
}

使用WriteAt写数据:在指定的位置写入数据

func FileWriteAt() {// 创建文件file, err := os.Create("/Users/itzhuzhu/Desktop/filetest/CreateFile")if err != nil {fmt.Println(err)}defer file.Close()// WriteAt写数据,返回值参数1是写的字符长度,参数2是异常信息// WriteAt写数据,参数列表中参数1是要写的数据,参数2是要写入数据的开始索引var str string = "WriteAt写入的数据"num, _ := file.Seek(0, io.SeekEnd) //SeekEnd:将数据追加到源文件,参数一:追加数据的开始索引,fmt.Println("num:", num)len, err := file.WriteAt([]byte(str), num)if err != nil {fmt.Println(err)}fmt.Println(len)
}

OpenFile追加数据:

  • 文件里已经有数据的情况下,用上面的三种方式去写,会出现覆盖的效果,WriteAt可以指定索引,但是比较麻烦。

os.OpenFile():打开指定文件进行操作

  • OpenFile有三个参数:
  • 参数1:打开文件的路径
  • 参数2:模式,常见的模式有
参数 说明
O_RDONLY 只读方式打开
O_WRONLY 只写方式打开
O_RDWR 读写方式打开
O_APPEND 追加方式打开
O_CREATE 不存在,则创建
O_EXCL 如果文件存在,且标定了O_CREATE的话,则产生一个错误
O_TRUNG 如果文件存在,且它成功地被打开为只写或读写方式,将其长度裁剪唯一(覆盖)
O_NOCTTY 如果文件名代表一个终端设备,则不把该设备设为调用进程的控制设备
O_NONBLOCK 如果文件名代表一个FIFO,或一个块设备,字符设备文件,则在以后的文件及I/O操作中置为非阻塞模式
O_SYNC 当进行一系列写操作时,每次都要等待上次的I/O操作完成再进行
  • 参数3:表示权限,取值范围(0-7),和linux里操作文件那个读写一样

0:没有任何权限
1:执行权限(如果是可执行文件,是可以运行的)
2:写权限
3:写权限与执行权限
4:读权限
5:读权限与执行权限
6:读权限与写权限
7:读权限,写权限,执行权限

演示:

func OpenFileTest() {// 追加写数据file, err := os.OpenFile("/Users/itzhuzhu/Desktop/filetest/OpenFileTest.txt", os.O_APPEND|os.O_WRONLY, 6)if err != nil {fmt.Println(err)}defer file.Close()// 通过文件指针读写数据len, err := file.WriteString("\t我追加了吗")if err != nil {fmt.Println(err)}fmt.Println(len)
}

Open读取文件:

读取指定文件的数据

演示:

func OpenFileTest2() {// 追加写数据file, err := os.Open("/Users/itzhuzhu/Desktop/filetest/OpenFileTest.txt")if err != nil {fmt.Println(err)}defer file.Close()// 读数据,定义一个切片存储文件读取的数据buffer := make([]byte, 1024)len, err := file.Read(buffer)// len:读取文件中的数据长度if err != nil {fmt.Println(err)}fmt.Println(len)//fmt.Println(buffer) // 直接打印都是数字(ascii码值),长度是1024,数据没满的时候就会用默认值0代替,可以使用截取操作fmt.Println(buffer[:len])fmt.Println(string(buffer[:len])) // 将类型转换为string,可以展示出内容
}

ReadBytes缓冲区读取:

在使用ReadBytes( )函数读取数据时,需要用到缓冲区,所谓缓冲区就是存储数据的区域,也就是先将从文件中读取的数据存储在该区域内,然后在将区域中的数据取出来,写到磁盘上。

提供缓冲区的原因是:

为了缓和 CPU 与 磁盘设备之间速度不匹配矛盾。文件缓冲区是用以暂时存放读写期间的文件数据而在内存区预留的一定空间。

演示:

func ReadBytesTest() {// 追加写数据file, err := os.Open("/Users/itzhuzhu/Desktop/filetest/OpenFileTest.txt")if err != nil {fmt.Println(err)}defer file.Close()// 读数据,定义一个切片存储文件读取的数据r := bufio.NewReader(file)for {buf, err := r.ReadBytes('\n')if err == io.EOF { // io.EOF是io包中的变量, 表示文件结束的错误:break}fmt.Println(err)fmt.Println("buf", string(buf))}
}

os.Args:

os.Args是一个string的切片,可以存储所有的命令行参数

package mainimport ("fmt""os"
)func main() {// 获取命令行参数,第0个参数是文件本身,后面的是启动可执行文件后传入的参数args := os.Args// 因为规定了上传文件需要携带至少一个的文件路径,所以需要在这里判断一下上传的文件数是否满足格式if len(args) != 2 {fmt.Println("格式为:go run 可执行文件名.go 文件名")return}//提取文件名path := args[1]// 获取文件属性stat, err := os.Stat(path)if err != nil {fmt.Println("os.Stat 出错了:", err)return}fmt.Println("文件名:", stat.Name())fmt.Println("文件名:", stat.Size())
}

执行结果:

itzhuzhu@itzhuzhudeMacBook-Pro ~ % go run /Users/itzhuzhu/Desktop/goCode/basics/src/day08/命令行参数.go /Users/itzhuzhu/Desktop/产品经理自学路线图.jpeg
文件名: 产品经理自学路线图.jpeg
文件名: 588986
itzhuzhu@itzhuzhudeMacBook-Pro ~ %

flag:

flag包实现了命令行解析,使用Args拿到命令行参数如果不是按照顺序写的就会有问题,可以使用flag解析,指定名称然后带参数,类似于mysql登录的时候写-u -p一样

func listFiles6() {var user stringvar password stringvar host stringvar port int/**参数1:设置对应的标签名,可以通过该标签名来或得对应值参数2:如果没有设置该标签,则采用这个值即该值为默认值参数3:这个参数为帮助信息,一般用于help调用展示&user:接收用户命令行中输入的 -u 后面的参数"u":-u的参数"":默认值"用户名默认为空":提示说明*/flag.StringVar(&user, "u", "", "用户名默认为空")flag.StringVar(&password, "p", "", "密码默认为空")flag.StringVar(&host, "h", "localhost", "主机名默认为localhost")flag.IntVar(&port, "port", 8000, "端口号默认8000")// Parse:从args中解析注册的flag。也就是转换的flag.Parse()fmt.Printf("user=%v password=%v host=%v port=%v\n", user, password, host, port)
}

执行结果:

itzhuzhu@itzhuzhudeMacBook-Pro day06 % go run 文件操作.go -u root -p ppp -h 127.0.0.1 -port 3306
user=root password=ppp host=127.0.0.1 port=3306

Golang——文件创建和写入、OpenFile追加写入、Open读取文件、ReadBytes缓冲区读取、os.Args、flag相关推荐

  1. python excel 追加写入_python excel写入及追加写入

    # -*- coding:utf-8 _*- """ @author:Administrator @file: excel.py Description : 如果行数是1 ...

  2. python excel写入加前缀_python excel写入及追加写入

    # -*- coding:utf-8 _*- """ @author:Administrator @file: excel.py Description : 如果行数是1 ...

  3. springbatch读取文件_Spring Batch读取txt文件并写入数据库的方法教程

    项目需求 近日需要实现用户推荐相关的功能,也就是说向用户推荐他可能喜欢的东西. 我们的数据分析工程师会将用户以及用户可能喜欢的东西整理成文档给我,我只需要将数据从文档中读取出来,然后对数据进行进一步的 ...

  4. golang 文件 文件夹 创建 读取 移动 复制 写入 遍历

    目录 文件读取 创建 写入 移动 拷贝 删除 文件 创建文件夹 文件覆盖判断 遍历文件夹 权限 文件操作, 大体分为两部分: os库 : 文件\文件夹创建,读取,移动,复制 io库 : 文件内容的写入 ...

  5. pandas追加写入行、列

    文章目录 追加写入行 追加写入列 追加写入行 import pandas as pdfor i in range(2):x = [1, 2, 3, 4]df = pd.DataFrame(x)df.t ...

  6. python中的文件操作:读取、写入、追加、关闭

    1.open()函数,用于文件的读取和创建,常用的格式如下: file = open(file_name [, mode='r' [ , buffering=-1 [ , encoding = Non ...

  7. GoLang之读取文件10种的方法

    文章目录 一. 整个文件读入内存 1.直接指定文化名读取 1.1使用os.ReadFile函数读取文件 1.2使用ioutil.ReadFile函数读取文件 2.先创建句柄再读取 2.1使用os.Op ...

  8. Golang处理excel用流式写入,追加行数据

    Golang处理excel用流式写入,追加行数据 func StreamWriterFunc(contents [][]string) {//打开工作簿file, err := excelize.Op ...

  9. Java CSV文件读取、写入及追加

    Java CSV文件读取.写入及追加 https://blog.csdn.net/liq816/article/details/81286472 追加: FileOutputStream out = ...

最新文章

  1. 数据库报错: SQLCODE: -418, SQLSTATE: 42610, SQLERRMC: null
  2. beego 文件服务器,beego自动化文档
  3. 设计模式(10)-装饰模式详解(易懂)
  4. 龟兔赛跑——多线程练习
  5. JS以及CSS对页面的阻塞
  6. arima 预测模型_预测未来:学习使用Arima模型进行预测
  7. Vue项目部署,打包发布上线
  8. Linux日常运维(rsync通过服务连接,linux日志,screen)
  9. 海康威视监控有线/无线安装调试
  10. [句子成分] 一、主语
  11. 中兴手机数据通道打不开_中兴RRU故障排查指导手册
  12. LINQ:使用join进行联接
  13. 【python爬虫自学笔记】-----爬取简书网站首页文章标题与链接
  14. 区块链网络的价值是啥?
  15. 2021-11-16 QCustomPlot之柱状图
  16. Linux之网络相关命令——ping、tranceroute、netstat、ftp、lftp、wget、ssh、scp、sftp
  17. Python的re库和正则表达式
  18. m-audio keystation 88/61 midi键盘的走带控制器在cubase里面怎么用
  19. 小程序基础开发(三):授权,获取用户信息,注册,登录,简单封装request请求
  20. 自然语言处理入门(5)——基于WordArt的AGM手机评论词频分析

热门文章

  1. python3dijkstra_python3 实现Dijkstra(迪杰斯特拉)最短路径算法
  2. python优化网站_[练习] 用PYTHON来优化网站中的图片
  3. andpods授权码订单号分享_微信OAuth2授权登录
  4. python 模糊匹配_很冷门,但非常实用的 Python 库
  5. mvc5控制器修改html,关于jquery:如何通过对控制器的ajax调用在MVC5中呈现局部视图并返回HTML...
  6. 简述oracle数据库特殊状态,【OracleDB】 01 概述和基本操作
  7. 计算机应用基础操作题提示,计算机应用基础_操作题文字提示(已经放大了请不要打印).doc...
  8. MySQL 查询数据表
  9. lvs工作在第几层_LVS 原理(调度算法、四种模式、四层负载均衡和七层 的区别)...
  10. MXNet的Model API