Golang文件操作

news/2024/11/2 21:52:13/

1.文件介绍:文件是数据源,主要作用是保存数据

2.文件在程序中是以流的形式来操作的

 对文件的操作主要用File(os包)结构体来实现

 文件的基本操作

1)打开一个文件进行读操作:

os.Open(name string)(*File,error)

2)关闭一个文件

File.close()

案例:使用的函数和方法

func main(){//打开文件//概念说明:file的叫法//1.file叫file对象//2.file叫file指针//3.file叫file文件句柄file, err := os.Open("d:/text.txt")if err != nil {fmt.Println("oprn filr err=",err)    }//输出下文件,可以看出文件就是个指针 fmt.Printf("file=%v",file)//关闭文件err = file.close()if err != nil{fmt.Println("close file err=",err)    }}

 读文件操作应用实例

1)读取文件的内容并显示在终端(带缓冲区的方式),使用os.Open,file.Close, bufio.NewReader(),reader.ReadString函数和方法
func main(){//打开文件//概念说明:file的叫法//1.file叫file对象//2.file叫file指针//3.file叫file文件句柄file, err := os.Open("d:/text.txt")if err != nil {fmt.Println("oprn filr err=",err)    }//当函数退出时,请及时的关闭filedefer file.Close()//要及时关闭file句柄,否则会有内存泄漏//创建一个*Reader,是指针类型带缓冲的/*const(defaultBufSize=4096)默认缓冲的缓存区为4096字节*///有缓冲在读取文件的时候不是一次性把文件读入内存而是读一部分处理一部分,可以处理较大的文件reader := bufio.NewReader(file)//循环读取文件的内容for {str, err := reader.ReadString('\n')//读到一个换行就结束   ,将读取的内容存入strif err == io.EOF {//io.EOF表示文件的末尾break} //输出内容fmt.Print(str)}fmt.Println("文件读取结束")
}
2)读取文件内容并显示在终端(使用ioutil一次将整个文件读入内存中),这种方式适用于文件不大的情况,相关方法和函数(ioutil.ReadFile)

func main(){//这是使用ioutil.ReandFile一次性将文件读取到位file := "d:/text.txt"content,err := ioutil.ReadFile(file)if err != nil{fmt.Print("read file err=%v",err)  }//把读取到的内容显示到终端fmt.Printf("%v",content)//[]byte,输出的全是数字fmt.Printf("%v",string(content))//转成string
}//这个方法并没有打开所以不用关闭。打开和关闭文件都被隐藏在ReadFile这个方法里

 写文件操作应用实例

基本介绍-os.OpenFile函数

基本应用实例:方式一 注意写的时候用的是带缓存的Writer

 (1)创建一个新文件,写入内容5句"hello,Gardon"
 func main(){//创建一个新文件,写入内容5句“hello,Gardon”//1.打开文件 filePath := "d:/abc.txt"file, err := os.OpenFile(filePath, os.O_WRONLY | os.O_CREATE, 0666)//0666在windows下面没有作用if err != nil{fmt.Printf("open file err=%v\n",err)return     }//关闭文件defer file.Close() //准备写入五句话“hello,Gardon”str := "Hello, Gardon\n" //写入时,使用带缓存的 *Writerwriter := bufio.NewWriter(file)for i := 0;i < 5;i++{writer.WriteString(str)}//因为writer是带缓存,因此在调用这个writerString方法时,其实内容是先写入到缓存的//所以需要调用Flush方法,将缓冲的数据真正写入文件中,否则文件中会丢失数据!!!!writer.Flush()}
 (2)打开一个已经存在的文件中,将原来的内容覆盖成新的内容10句”你好,尚硅谷!“
func main(){//打开一个已经存在的文件中,将原来的内容覆盖成新的内容10句“你好,尚硅谷!”//1.打开一个已经存在的文件filePath := "d:/abc.txt"file, err := os.OpenFile(filePath, os.O_WRONLY | os.O_TRUNC, 0666)//0666在windows下面没有作用if err != nil{fmt.Printf("open file err=%v\n",err)return     }//关闭文件defer file.Close() //准备写入五句话“hello,Gardon”str := "你好,尚硅谷!\r\n"  //写入时,使用带缓存的 *Writerwriter := bufio.NewWriter(file)for i := 0;i < 10;i++{writer.WriteString(str)}//因为writer是带缓存,因此在调用这个writerString方法时,其实内容是先写入到缓存的//所以需要调用Flush方法,将缓冲的数据真正写入文件中,否则文件中会丢失数据!!!!writer.Flush()
}
(3)打开一个已经存在的文件,在原先的内容上追加内容‘ABC!ENGLISH!’
func main(){//打开一个已经存在的文件,在原先的内容上追加内容'ABC! ENGLISH!'//1.打开文件已经存在的文件filePath := "d:/abc.txt"file, err := os.OpenFile(filePath, os.O_WRONLY | os.O_APPEND, 0666)//0666在windows下面没有作用if err != nil{fmt.Printf("open file err=%v\n",err)return     } //关闭文件句柄defer file.Close() //准备写入五句话“hello,Gardon”str := "ABC,ENGLISH\r\n"  //写入时,使用带缓存的 *Writerwriter := bufio.NewWriter(file)for i := 0;i < 10;i++{writer.WriteString(str)}//因为writer是带缓存,因此在调用这个writerString方法时,其实内容是先写入到缓存的//所以需要调用Flush方法,将缓冲的数据真正写入文件中,否则文件中会丢失数据!!!!writer.Flush()
}
(4)打开一个存在的文件,将原来的内容读出显示在终端,并且追加5句”hello,北京!“
func main(){////1.打开文件已经存在的文件filePath := "d:/abc.txt"file, err := os.OpenFile(filePath, os.RDWR | os.O_APPEND, 0666)//0666在windows下面没有作用if err != nil{fmt.Printf("open file err=%v\n",err)return     } //及时关闭文件句柄defer file.close()//先读取原来文件的内容并显示在终端reader := bufio.NewReader(file)for{str, err := reader.ReadString('\n')   //每读到一个换行符就代表是一行if err == io.EOF{//如果到文件末尾就结束break         }//显示到终端fmt.Print(str)                }//追加五句“hello,北京”str := "hello,北京\r\n"//写入时,使用带缓存的 *Writerwriter := bufio.NewWriter(file)for i := 0;i < 10;i++{writer.WriteString(str)}//因为writer是带缓存,因此在调用这个writerString方法时,其实内容是先写入到缓存的//所以需要调用Flush方法,将缓冲的数据真正写入文件中,否则文件中会丢失数据!!!!writer.Flush()
}

基本应用实例-方式二

package main
import ("fmt""io/ioutil"
)func main(){//将d:/abc.txt文件内容导入到 e:/kkk.txt//1.首先将d:/abc.txt内容读取到内存//2.将读取到的内容写入e:/kkk.txtfile1Path := "d:/abc.txt"file2Path := "e:/kkk.txt"data, err := ioutil.ReadFile(file1Path)if err != nil{//说明读取文件有错误fmt.Printf("read file err=%v",err)return}err = ioutil.WriteFile(file2Path,data,0666)if err != nil{fmt.Printf("write file err=%v",err)}
}

 

拷贝文件 

注意:Copy函数是io包提供的(文件拷贝最好是同类型否则容易乱码)

//自己编写一个函数,接收两个文件路径 srcFileName dstFileName
func CopyFile(dstFileName string,srcFileName string)(written int64,err error){srcFile,err := os.Open(srcFileName)//返回一个文件句柄if err != nil {fmt.Printf("open file err=%v\n",err)   }defer srcFile.Close()//通过srcfile,获取到Reader reader := bufio.NewReader(srcFile)//打开dstFileName(因为这个文件可能不存在需要创建,所以不能用open打开)dstFile, err := os.OpenFile(dstFileName, os.O_WRONLY | os.O_CREATE, 0666)//0666在windows下面没有作用if err != nil{fmt.Printf("open file err=%v\n",err)return     }//通过dstFile,获取到 Writerwriter := bufio.NewWriter(dstFile)defer dstFile.Close()return io.Copy(writer,reader)
}
func main(){//将d:/flower.jpg 文件拷贝到 e:/abc.jPg//1.调用CopyFile 完成文件拷贝srcFile := "d:/flower.jpg"dstFile := "e:/abc.jpg"_, err := CopyFile(dstFile,srcFile)if err == nil{fmt.Printf("拷贝完成\n")  }else{fmt.P/rintf("拷贝完成 err=%v\n",err)    }}


http://www.ppmy.cn/news/1543980.html

相关文章

NYSQL期中小结

创建表 [语句不要拼错&#xff0c;表名、列明不要写错&#xff0c;语句难记要记住] 模版 create table 表名(列名1 数据类型 [约束], 列明2 数据类型 [约束]); 约束 单一主码约束 primary key 联合主码约束 primary key(列名1,列名2) [要在列名定义后&#xff0c;的单独表级…

axios 取消请求 版本是1.7.5

从 v0.22.0 开始&#xff0c;Axios 支持 AbortController 以 fetch API 的方式取消请求 官方例子 const controller new AbortController();axios.get(/foo/bar, {signal: controller.signal }).then(function(response) {//... }); // cancel the request controller.abort(…

Docker Compose入门学习——下载、授权、创建文件、定义服务

Docker Compose入门学习 简介 一般操作Docker的过程是&#xff1a;DockerFile build run 进行手动操作&#xff0c;单个容器&#xff0c;如果假设有100个微服务&#xff0c;并行微服务之间还存在依赖关系。这个时候&#xff0c;就可以使用Docker Compose来轻松高效的管理容器…

vue3中跨层传递provide、inject

前置说明 在 Vue 3 中&#xff0c;provide 和 inject 是一对用于跨组件树传递数据的 API。它们允许你在祖先组件中使用 provide 提供数据或服务&#xff0c;然后在后代组件中使用 inject 来获取这些数据或服务。这种方式特别适用于跨多个层级的组件传递数据&#xff0c;而不需要…

React前端框架

React 是一个用于构建用户界面的 JavaScript 库&#xff0c;由 Facebook 开发和维护。React 采用组件化的开发方式&#xff0c;使得开发者可以构建可复用的 UI 组件&#xff0c;从而提高开发效率和代码的可维护性。 React 的基本概念 组件&#xff1a;React 的核心概念是组件…

R语言实现GWAS meta分析(1)

1、基于数据集的Meta分析 datafilenamec("data1.txt","data2.txt"), setwd(workdir) library(Metalgwas) a1 name1c() for(i in datafilename){ assign(paste("file",a,sep""),data.table::fread(paste(getwd(),"/","…

Windows 安全日志解析

1. Windows 登录类型 在基于 Windows 的计算机中&#xff0c;以多个登录类型之一处理所有身份验证&#xff0c;无论使用何种身份验证协议或身份验证程序。 类型2&#xff1a;交互式登录(Interactive) 所谓交互式登录就是指用户在计算机的控制台上进行的登录&#xff0c;也就…

git入门教程10:git性能优化

一、配置优化 使用SSH协议&#xff1a; 相比HTTP/HTTPS协议&#xff0c;SSH协议在网络传输中更高效&#xff0c;且支持更安全的认证方式。确保你的远程仓库URL使用的是SSH协议&#xff0c;例如&#xff1a;git clone gitgithub.com:username/repo.git。 调整Git缓冲区大小&…