你知道Go的文件操作吗?嘿嘿

文件操作

文件操作,学啥语言都会要有这个,今晚上就决定搞这个了

  • 读取文件的操作一般都是在os这个包下面的,先从开发包开始哈

在这里插入图片描述

  • 这里可以看出哈,os包里面呢,拥有很对针对文件的操作哈
  • 常用的打开、读写、关闭,都是有的哈
  • 来举个例子跑跑,冲冲冲

读取一个文件类型 Open函数

	fileObj, err := os.Open("src/go.junmu.com/GoLearn/09文件操作/main.go")
  • 可以看出哈,他有两个返回值,文件类型的变量和一个err错误
  • 然后open里面放的是路径哈, 路径我们可以进行复制的,嘿嘿

在这里插入图片描述

  • 然后里面有三个路径

在这里插入图片描述

  • 我一般用的第三个路径就可以打开的,有的编译器不一样,看自己情况选择吧,反正是有一个能打开的,啊哈哈哈哈哈

关闭一个文件 Close函数

  • 这个要注意哈,文件打开后肯定要关的哈
  • 然后我们怕忘记的话,可以使用defer关键字进行一个最后的关闭,不理解的可以去看前面的文章哈,嘿嘿

defer关键字的应用

	defer fileObj.Close()

读入文件内容 Read函数

  • 因为要存放读取的内容哈,所以我们要整一个缓存区,想java里面也是一样的
	var tmp [128]byte   // 整个数组,用来存内容哈
  • 然后没啥说的了,直接上图

在这里插入图片描述

  • 可以看出哈,直接是将文件里面的内容全部读出来了哈,
  • 用一个tmp去循环读取数据,直到没有数据读的时候,退出即可。

咳咳, 这里说一下哈, 最后 n<128 好一点,不然后面会报错,报一个EOF的错误,也不算错误吧,就是读到头了。但是设置 n < 128 后,可以完美规避这个问题

	if err == io.EOF {   // 完美也可以这样进行判断,啊哈哈哈
		fmt.Println("文件读完了")
		return
	}

使用bufio包进行读取

package main

import (
	"bufio"
	"fmt"
	"io"
	"os"
)

func main() {
	fileObj, err := os.Open("src/go.junmu.com/GoLearn/09文件操作/Buffio读取/main.go")
	if err != nil {
		fmt.Println("open file failed, err:", err)
		return
	}
	defer fileObj.Close()
	reader := bufio.NewReader(fileObj)
	for {
		line, err := reader.ReadString('\n') //注意是字符
		if err == io.EOF {
			if len(line) != 0 {
				fmt.Println(line)
			}
			fmt.Println("文件读完了")
			break
		}
		if err != nil {
			fmt.Println("read file failed, err:", err)
			return
		}
		fmt.Print(line)
	}
}
  • 这样可以一行一行的读取,看需求使用哈。
  • 还有更简单的读取方式哦



ioutil读取整个文件

  • 这玩意就厉害了,直接一口去读取完整个文件

在这里插入图片描述

  • 这多爽,你说这搁谁谁不爱呀,啊哈哈
  • 其实看源码后会发现,只是人家帮你把读取的逻辑写好了而已,啊哈哈哈哈哈

那么以上就是文件读取的三种操作了,接下来看看文件的写入吧



文件写入操作

  • os.OpenFile() 函数能够以指定模式打开文件,从而实现文件写入相关功能。
func OpenFile(name string, flag int, perm FileMode) (*File, error) {
	...
}
  • name :要打开的文件名 flag :打开文件的模式。 模式有以下几种:
模式含义
os.O_WRONLY只写
os.O_CREATE创建文件
os.O_RDONLY只读
os.O_RDWR读写
os.O_TRUNC清空
os.O_APPEND追加

perm:文件权限,一个八进制数。r(读)04,w(写)02,x(执行)01。


Write和WriteString方式写入

在这里插入图片描述

  • 这两种方式还行吧,0666是权限哦,学过linux的应该知道,4+2,读写的权限,没有执行哦。

bufio.NewWriter 方式写入

  • 这个就是用上缓存的形式啦,先将文件进入缓存,然后将数据存放缓存里面,最后再将缓存里面的内容写入文件

在这里插入图片描述



ioutil.WriteFile 方式写入

  • 这玩意用的还是爽呀,直接写入,不给机会。啊哈哈哈哈哈哈
  • 上图解释吧

在这里插入图片描述

  • 您说说,这搁谁不喜欢呀,啊哈哈哈哈哈(别这样,看需求看需求哈,千万别盲目)

今晚的文件就肝到这里拉,大家也要要多练习鸭

点赞评论,送木木的同款背景图哦!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木木不会

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值