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

Golang--文件操作

1、文件

文件:文件用于保存数据,是数据源的一种

os包下的File结构体封装了对文件的操作(记得包os包)

 

2、File结构体--打开文件和关闭文件

2.1 打开文件

打开文件,用于读取(函数):
传入一个字符串(文件的路径),返回的是文件的指针和是否打开成功error

2.2 关闭文件

关闭文件(方法):
使文件不能用于读写,它返回可能出现的错误

package main
import (
	"fmt"
	"os"
)

func main(){
	//打开文件
	file,err := os.Open("D:/Golang_Project/src/GoCode/test1_project/main/t.txt")
	
	if err != nil { //出错
		fmt.Println("文件打开失败")
		return
	}else{
		fmt.Printf("文件内容=%v\n",file) //文件内容=&{0xc0000a66c8}
	}

	//关闭文件--调用方法
	err = file.Close()
	if err != nil{
		fmt.Println("关闭失败")
	}else{
		fmt.Println("关闭成功")
	}
}

 

3、读取操作

IO流:用于程序和数据源之间进行沟通
方向:输入和输出(写入程序为输入,程序写出为输出,对应输入流和输出流)

一次性全部读取

读取文件的内容并显示在终端(使用ioutil一次将整个文件读入到内存中),这种方式适用于文件不大的情况。相关方法和函数(ioutil.ReadFile)(包:io/ioutil

package main
import (
	"fmt"
	"os"
	"io/ioutil"
)

func main(){
	//打开文件
	file,err := os.Open("D:/Golang_Project/src/GoCode/test1_project/main/t.txt")
	
	if err != nil { //出错
		fmt.Println("文件打开失败")
		return
	}else{
		//其实不需要进行Open和Close,因为ioutil.ReadFile()会自动打开和关闭文件
		content,errRead := ioutil.ReadFile("D:/Golang_Project/src/GoCode/test1_project/main/t.txt") //返回类型是[]byte和error
		if errRead!= nil{
			fmt.Println("文件读取失败")
		}else{
			fmt.Printf("文件内容=%s\n",string(content)) //文件内容=hello world
		}
	}

	//关闭文件--调用方法
	err = file.Close()
	if err != nil{
		fmt.Println("关闭失败")
	}else{
		fmt.Println("关闭成功")
	}
}

带缓冲区的读取

读取文件的内容并显示在终端(带缓冲区的方式--4096字节),适合读取比较大的文件,使用os.Open,file.Close,bufio.NewReader(),reader.ReadString函数和方法

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

func main(){
	//打开文件:
	file,err := os.Open("D:/Golang_Project/src/GoCode/test1_project/main/t.txt")
	//关闭文件--defer
	defer file.Close()
	//判断文件是否打开成功
	if err!= nil{
		fmt.Println("文件打开失败")
		return
	}else{
		//创建一个流
		reader := bufio.NewReader(file)
		//读取文件
		for{
			//循环读取文件
			str,errRead := reader.ReadString('\n')//以换行符为单位读取文件
			fmt.Println(str)
			if errRead == io.EOF{ //io.EOF表示已经读取到文件末尾
				break
			}
		}
	}
}

4、写入文件 



参数含义:

  1. name:要打开的路径
  2. flag:文件打开模式(可以利用"|"符号进行组合)
  3. perm:权限控制(linux/unix系统下才生效,windows下设置无效)-0666(-rw-rw-rw-)
package main
import (
	"fmt"
	"os"
	"bufio"
)

func main(){
	//写入文件
	//打开文件
	file,err := os.OpenFile("D:/Golang_Project/src/GoCode/test1_project/main/t.txt",os.O_CREATE|os.O_WRONLY,0666)
	//关闭文件--defer
	defer file.Close()
	//判断文件是否打开成功
	if err!= nil{
		fmt.Println("文件打开失败")
		return
	}else{
		//写入文件操作:io流 -> 缓冲输出流(带缓冲区)
		write := bufio.NewWriter(file)
		write.WriteString("hello world\n")
		//刷新缓冲区---> 才会将缓冲区的内容写入到文件中
		write.Flush()
	}
}

 

5、文件复制

文件复制 f1 - > f2:

  1. 读取f1文件
  2. 写入f2文件

package main
import (
	"fmt"
	"io/ioutil"
)

func main(){
	//定义源文件
	file1Path := "D:/Golang_Project/src/GoCode/test1_project/main/t.txt"
	//定义目标文件
	file2Path := "D:/Golang_Project/src/GoCode/test1_project/main/t1.txt"

	//对文件进行读取:
	content,err1 := ioutil.ReadFile(file1Path)
	if err1!= nil{
		fmt.Println("文件读取失败")
		return
	}

	//对文件进行写入:
	err2 := ioutil.WriteFile(file2Path,content,0666)
	if err2!= nil{
		fmt.Println("文件写入失败")
		return
	}

http://www.kler.cn/a/387792.html

相关文章:

  • flink sql + kafka + mysql 如何构建实时数仓
  • 常用的Anaconda Prompt命令行指令
  • 使用kalibr_calibration标定相机(realsense)和imu(h7min)
  • 11Java面向对象高级(篇2,Java程序的核心套路!!!!)
  • 深入理解 Vue v-model 原理与应用
  • Debezium日常分享系列之:异步 Debezium 嵌入式引擎
  • D64【python 接口自动化学习】- python基础之数据库
  • Redis常用的五大数据类型(列表List,集合set)
  • 计算机视觉实验四:特征检测与匹配
  • CSS外边距合并及解决办法
  • PL端:HDMI 输出实验
  • XMLHttpRequest以及Promise对象的使用
  • adb:Android调试桥
  • 揭秘云计算 | 2、业务需求推动IT发展
  • 单相锁相环,原理与Matlab实现
  • 【ECCV2024】V-IRL: Grounding Virtual Intelligence in Real Life
  • 海量数据迁移:Elasticsearch到OpenSearch的无缝迁移策略与实践
  • 【优选算法篇】微位至简,数之恢宏——解构 C++ 位运算中的理与美
  • uni-app小程序开发(1)
  • 【大模型】Spring AI Alibaba 对接百炼平台大模型使用详解
  • CX_SY_OPEN_SQL_DB
  • leetcode92:反转链表||
  • C#入门 017 字段,属性,索引器,常量
  • R语言*号标识显著性差异判断组间差异是否具有统计意义
  • 5. Redis的 安全与性能优化
  • ubuntu问题 -- ubuntu图形化桌面突然打不开了, 一开机黑屏, 或者直接就是login登录的tty命令行界面