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和errorif 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")//关闭文件--deferdefer 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、写入文件
参数含义:
- name:要打开的路径
- flag:文件打开模式(可以利用"|"符号进行组合)
- 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)//关闭文件--deferdefer file.Close()//判断文件是否打开成功if err!= nil{fmt.Println("文件打开失败")return}else{//写入文件操作:io流 -> 缓冲输出流(带缓冲区)write := bufio.NewWriter(file)write.WriteString("hello world\n")//刷新缓冲区---> 才会将缓冲区的内容写入到文件中write.Flush()} }
5、文件复制
文件复制 f1 - > f2:
- 读取f1文件
- 写入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}