一文搞懂Go语言中文件的读写与创建

 更新时间:2022年07月04日 16:12:15   作者:秋日的晚霞  
这篇文章主要为大家详细介绍了Go语言中文件是如何实现读写与创建的,文中的示例代码讲解详细,对我们学习Go语言有一定帮助,需要的可以参考一下

1. 文件的打开与关闭

1.1 os.open

os.open 函数能打开一个文件 调用 close() 方法 关闭文件

	//打开文件
	open, err := os.Open("./1.text")
	
	if err != nil {
		//打印异常信息
		fmt.Println("open file err", err)
	}

	fmt.Println("文件获取完毕")

	//没有出现异常,关闭文件
	open.Close()

为了防止忘记关闭文件,通常都将关闭文件的代码写在 defer中

	//打开文件
	open, err := os.Open("./1.text")

	defer func() {
		if open != nil {
			// 关闭文件
			open.Close()
		}
	}()

	if err != nil {
		//打印异常信息
		fmt.Println("open file err", err)
	}

	fmt.Println("文件获取完毕")

1.2 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。

2. 文件的读取

2.1 打开文件的方式读取文件中的数据

//首先需要打开一个文件
	open, err := os.Open("./1.text")
	defer func() {
		e := recover()
		if e != nil {

			fmt.Println("打开文件出现了异常", e)
		}
	}()

	if err != nil {
		// 如果有异常  没必要往下走了  抛出
		panic(err)
	}

	//如果没有异常
	//创建 字节切片
	bytes := make([]byte, 1024)

	defer func() {
		e := recover()
		if e != nil {

			fmt.Println("读取文件出现了异常", e)
		}
	}()

	for {
		//循环读
		_, err := open.Read(bytes)

		if err != nil {
			panic(err)
		}

		//打印结果
		fmt.Println(string(bytes))
	}

2.2 使用 bufio 整行读取文件

bufio 是在file的基础上封装了一层API , 支持更多的功能

	//同样的首先打开一个文件
	file, err := os.Open("./1.text")

	defer recover()

	if err != nil {
		panic("文件打开出现异常")
	}

	// 封装为 bufio
	reader := bufio.NewReader(file)

	defer recover()

	for {

		//读到指定字符串换一行
		line, _, err := reader.ReadLine()

		if err != nil {
			if err == io.EOF {
				fmt.Println("文件读写完毕")
				break
			}
			panic("文件读取出现异常")
		}

		fmt.Println(string(line))
	}

	fmt.Println("程序运行结束")
func main() {
	file, err := os.OpenFile("xx.txt", os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0666)
}

3. 写入文件操作

无论是文件读取还是文件写入 都是需要先打开文件 再进行操作

3.1 file.Write 与 file.WriteString

// 首先打开文件  O_RDWR  读写权限  O_TRUNC  清空文件  0 开头表示八进制 666表示 当用用户 当前组  其他用户 都是可读可写权限
	file, err := os.OpenFile("1.text", os.O_RDWR|os.O_TRUNC, 0666)
	if err != nil {
		fmt.Printf("打开文件出现异常 %v", err)
	}

	defer file.Close()

	// 返回 写入的字节数
	write, err := file.Write([]byte("测试文件写入 \n"))
	file.WriteString("一次写入整个字符串")

	if err != nil {
		fmt.Println(err)
	}

	fmt.Println(write)

3.2 bufio.NewWriter

// 基于缓存操作
	file, err := os.OpenFile("2.text", os.O_CREATE|os.O_WRONLY|os.O_TRUNC, 0666)
	if err != nil {
		panic(err)
	}

	defer func() {
		file.Close()
		if e := recover(); e != nil {
			fmt.Printf("异常 : 打开文件出现异常 %v", e)
		}
	}()

	// 使用 bufio 基于缓存操作io流
	// 需要传入 一个 io 接口包下的 Writer 接口实现类 而 file 实现了该 方法

	writer := bufio.NewWriter(file)

	writer.WriteString(" 写入缓存字符串内容 2")

	//需要将缓存中的数据刷新到硬盘上
	writer.Flush()

3.3 ioUtil 工具类

	// 使用工具类  打开文件,写入文件一气呵成
	err := ioutil.WriteFile("3.text", []byte("工具类写入内容"), 0666)

	if err != nil {
		fmt.Println("程序运行出现异常", err)
	}

到此这篇关于一文搞懂Go语言中文件的读写与创建的文章就介绍到这了,更多相关Go语言 文件读写 创建内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • GoLang context包的使用方法介绍

    GoLang context包的使用方法介绍

    日常Go开发中,Context包是用的最多的一个了,几乎所有函数的第一个参数都是ctx,那么我们为什么要传递Context呢,Context又有哪些用法,底层实现是如何呢?相信你也一定会有探索的欲望,那么就跟着本篇文章,一起来学习吧
    2023-03-03
  • ubuntu下搭建Go语言(golang)环境

    ubuntu下搭建Go语言(golang)环境

    这篇文章主要介绍了ubuntu下搭建Go语言(golang)环境,需要的朋友可以参考下
    2015-01-01
  • Golang 数据库操作(sqlx)和不定字段结果查询

    Golang 数据库操作(sqlx)和不定字段结果查询

    本文主要介绍了Golang 数据库操作(sqlx)和不定字段结果查询,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • go语言LeetCode题解720词典中最长的单词

    go语言LeetCode题解720词典中最长的单词

    这篇文章主要为大家介绍了go语言LeetCode题解720词典中最长的单词,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • Go语言七篇入门教程六网络编程

    Go语言七篇入门教程六网络编程

    这篇文章主要为大家介绍了Go语言的网络编程,其中包含了Socket编程,Http编程以及RPC编程,本篇文章是Go语言七篇入门系列文章,有需要的朋友可以借鉴下
    2021-11-11
  • Go语言实现服务端消息接收和发送

    Go语言实现服务端消息接收和发送

    这篇文章主要为大家详细介绍了Go语言实现服务端消息接收和发送功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-07-07
  • Go Interface接口初学者手册

    Go Interface接口初学者手册

    这篇文章主要为大家介绍了Go Interface接口的基础用法实例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-01-01
  • golang优先级队列的实现全过程

    golang优先级队列的实现全过程

    优先级队列是一种特殊队列,下面这篇文章主要给大家介绍了关于golang优先级队列的实现全过程,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2022-12-12
  • golang实现http server提供文件下载功能

    golang实现http server提供文件下载功能

    这篇文章主要介绍了golang实现http server提供文件下载功能,本文给大家简单介绍了Golang的相关知识,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-02-02
  • Go Java算法之同构字符串示例详解

    Go Java算法之同构字符串示例详解

    这篇文章主要为大家介绍了Go Java算法之同构字符串示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08

最新评论