首页 > 其他分享 >11、go的文件操作

11、go的文件操作

时间:2022-11-25 16:14:23浏览次数:40  
标签:11 文件 读取 err fmt Println file go

文件

创建一个测试文件
image
代码测试:

func main() {
	// 打开文件
	file, err := os.Open("E:/test/Test.txt")
	if err != nil { // err不为空,说明报错
		fmt.Println("文件打开出错:", err)
	}
	fmt.Printf("文件:%v", file) // 文件:&{0xc00010a780}

	// 关闭文件:
	err2 := file.Close()
	if err2 != nil {
		fmt.Println("关闭文件失败")
	}
}

io引入

image

读取文件

func main() {
	// 不需要进行流的打开/关闭操作,这些封装在ReadFile函数里面了
	// 读取文件,返回:[]byte, err
	file, err := ioutil.ReadFile("E:/test/Test.txt")
	if err != nil {
		fmt.Println("读取有误:", err)
	}
	fmt.Printf("%v", string(file)) // hello,golang
}

使用带缓冲区的方式:
比如这个文件的内容很多,有很多行

func main() {
	// 打开文件
	file, err := os.Open("E:/test/Test.txt")
	if err != nil {
		fmt.Println("文件打开失败")
	}
	// 函数退出时,让file关闭,防止内存泄露
	defer file.Close()

	// 创建一个流
	reader := bufio.NewReader(file)
	// 进行读取操作
	for {
		// 读取到换行就结束
		str, err := reader.ReadString('\n')
		// io.EOF表示读取到文件结尾
		if err == io.EOF {
			break
		}
		// 如果没有读取到文件结尾,就正常输出
		fmt.Println(str)
	}
	// 结束
	fmt.Println("文件读取成功,并全部读取完毕")
}

打印:
image

写出文件

func main() {
	// 写入文件:
	// 先打开文件,在E:/test目录下会生成一个文件demo.txt
	// 参数2:文件打开模式, 参数3:权限控制
	file, err := os.OpenFile("E:/test/demo.txt", os.O_RDWR|os.O_APPEND|os.O_CREATE, 0666)
	if err != nil {
		fmt.Println("打开文件失败:", err)
	}
	// 及时关闭文件
	defer file.Close()

	// 写入文件操作: IO流 --> 缓冲输出流(带缓冲区)
	writer := bufio.NewWriter(file)
	// 写入10句你好到缓冲区里面
	for i := 0; i < 10; i++ {
		writer.WriteString("你好")
	}
	// 刷新数据,把数据刷到磁盘
	writer.Flush()

	// 查看一下0666是什么权限,代表什么意思
	s := os.FileMode(0666).String()
	fmt.Println(s)	// -rw-rw-rw-
}

允许完代码,查看对应路径下的文件,写入成功
image

文件复制操作

就是去读一个文件,然后把这个文件的内容写出去

func main() {
	// 定义源文件
	file1Path := "E:/test/demo.txt"
	// 定义目标文件
	file2Path := "E:/test/demo2.txt"

	// 对文件进行读取
	content, err := ioutil.ReadFile(file1Path)
	if err != nil {
		fmt.Println("读取有问题")
		return
	}
	// 写出文件
	err = ioutil.WriteFile(file2Path, content, 0666)
	if err != nil {
		fmt.Println("写出失败")
	}
}

运行完代码后,到对应目录查看写出去复制好的文件
image

标签:11,文件,读取,err,fmt,Println,file,go
From: https://www.cnblogs.com/abiu/p/16386901.html

相关文章

  • 10、go的面向对象
    结构体结构体的定义//定义结构体,老师的结构体,各个属性统一放入结构体管理typeTeacherstruct{ //变量名大写开头外界可以访问 Namestring Ageint Scho......
  • 9、go的map
    map引入funcmain(){ //定义map varamap[int]string //只声明map内存是没有分配空间的,必须通过make函数进行初始化 a=make(map[int]string,10)//如果不指......
  • mybatis xml文件中用 if 标签判断字符串是否相等
    方法一:<iftest="delFlag=='2'.toString()">a.del_flag=#{delFlag}</if> 方法二:<iftest='delFlag=="2"'>a.del_flag=#{delFlag}</if> ......
  • 【11.19-11.25】博客精彩回顾
    一、优秀文章推荐1.​​对象可达性状态流转分析、引用队列使用和诊断JVM引用情况知识讲解​​2.​​【SpringCloud实战】Eurake服务注册与发现​​3.​​Flink-水位线的......
  • Waves Complete 11 for Mac(Waves全套混音插件包) v2020.11.12 完美激活版
    WavesCompleteformac是一款强大的音乐创作工具,含有各种混音插件,从运行速度到插件调用,性能和速度都大大提升,从混响,压缩,降噪和EQ到模拟硬件,环绕和后期制作工具,深受艺术家们......
  • 极智穷思,数往知来 | 2022年11月《中国数据库行业分析报告》精彩抢先看
    为了帮助大家及时了解中国数据库行业发展现状、梳理当前数据库市场环境和产品生态等情况,从2022年4月起,墨天轮社区行业分析研究团队出品将持续每月为大家推出最新《中国数......
  • 任务11 面向对象基础
    一、理解面向对象1、面向过程:面向过程是一种以过程为中心的编程思想其原理就是将问题分解成一个一个详细的步骤,然后通过函数实现每一个步骤,并依次调用。2、面向对象:......
  • Memcache,Redis,MongoDB(数据缓存系统)方案对比与分析
    摘要:一、问题:      数据库表数据量极大(千万条),要求让服务器更加快速地响应用户的需求。 二、解决方案:   1.通过高速服务器Cache......
  • WINDOWS下对NIGNX日志文件进行限制
    首先接到这个任务,发现nginx的日志限制更多的都是在Linux下做的,找了半天,也没找到能直接通过nginx.conf更改体现到日志限制上的。最后决定直接通过bat脚本,来对nginx......
  • MongoDB - 事务支持
    事务简介事务是数据库中处理的逻辑单元,每个事务中包括一个或多个数据库操作,既可以是读操作,也可以是写操作。ACID是一个“真正”事务所需要具备的一组属性集合,指的是原子......