go实现文件的创建、删除与读取示例代码

 更新时间:2019年02月06日 09:58:00   作者:w85278161  
这篇文章主要给大家介绍了关于go如何实现文件的创建、删除与读取的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起看看吧

文件目录的创建和删除

package main

import(
 "fmt"
 "os"
)

func main(){
 //创建目录和权限
 os.Mkdir("./benben",0777)
 //创建多级目录和设置权限
 os.MkdirAll("./benben/test",0777)
 //删除目录
 err:=os.Remove("./benben")
 if err!=nil{
 fmt.Println(err)
 }
 //删除多级目录
 os.RemoveAll("./benben")
}

文件的创建

package main

import (
 "os"
 "fmt"
)

func main(){
 //文件的创建,Create会根据传入的文件名创建文件,默认权限是0666
 file,err:=os.Create("a.txt")
 if err!=nil{
 fmt.Println(err)
 }
 defer file.Close()
}

文件的打开和关闭

文件的打开和关闭相关函数在文件的读取和写入示例中演示。

文件的读取和写入

文件的读取有以下几种方式:

方法一: 利用 os.Open() 和 ioutil.ReadAll() 两个方法

package main

func main(){
 //打开文件
 file,err:=os.Open("a.txt")
 if err !=nil {
 fmt.Println(err)
 }
 //文件的关闭
 defer file.Close()
 //文件读取方式一,通过os.Open返回一个文件句柄,然后利用它进行读取
 body,err:=ioutil.ReadAll(file)
 if err !=nil {
 fmt.Println(err)
 }
 fmt.Println(string(body))
}

方法二:利用 ioutil.ReadFile() 方法来实现读取操作。

package main

func main(){
 body,err:=ioutil.ReadFile("a.txt")
 if err!=nil {
 fmt.Println(err)
 }
 fmt.Println(string(body))
}

ReadFile函数直接将方式一中的三个步骤分装在了一起,下面是实现的具体代码。

func ReadFile(filename string)([]byte,error){
 //打开文件
 f,err:=os.Open(filename)
 if err!=nil {
 return nil,err
 }
 //延迟关闭文件
 defer f.Close()

 //设置读取文件的字节数
 var n int64
 //Stat()方法会返回描述指定文件的信息结构FileInfo
 if fi,err:=f.Stat();err==nil{
 if size:=fi.Size();size<1e9{
 n=size
 }
 }

 //返回读取的文件内容
 return readAll(f,n+bytes.MinRead)
}

FileInfo具有以下方法:

Name() string //返回文件名
Size() int64 //返回文件的字节长度
Mode() FileMode //文件模式位
ModTime() time.Time //修改时间
IsDir() bool //是否是目录
Sys() interface{} //底层数据源

方法三: 带缓存的读取

package main

func main(){
 file,err:=os.Open("a.txt")
 if err!=nil {
 fmt.Println(err)
 }
 defer file.Close()

 //创建一个新的io.Reader,它实现了Read方法
 reader:=bufio.NewReader(file)
 //设置读取的长度
 buf:=make([]byte,1024)
 //读取文件
 _,err=reader.Read(buf)
 if err!=nil {
 fmt.Println(err)
 }
 fmt.Println(string(buf))
}

文件的写入

方法一: 利用ioutil. Write File()

package main

import (
 "io/ioutil"
)
func main(){
 content:=[]byte("Go is an open source programming language that makes is easy to build simple,reliable,and efficient software)
 err:=ioutil.WriteFile("a.txt",content,0777)
 if err!=nil {
 fmt.Println(err)
 }
 fmt.Println("write file successful")
}

看看WriteFile具体是如何实现文件的写入的。

func WriteFile(filename string,data []byte,perm os.FileMode) error{
 //打开文件
 f,err:=os.OpenFile(filename,os.O_WRONLY|os.O_CREATE|os.O_TRUNC,perm)
 if err!=nil {
 return err
 }
 //文件的写入
 n,err:=f.Write(data)
 if err==nil && n<len(data){
 err=io.ErrShortWrite
 }
 //关闭文件
 if err1:=f.Close();err==nil{
 err=err1
 }
 return err
}

方法二:打开文件,然后利用Write()进行文件读写, 注意 :此时不能用os.Open()打开,而要用os.OpenFile()打开。 os.Open()和os.OpenFile()两者区别

package main

func main(){
 file,err:=os.OpenFile("a.txt",os.O_RDWR|os.O_CREATE,0777)
 if err!=nil {
 fmt.Println(err)
 }
 defer file.Close()

 content:=[]byte("Go is an open source programing language that makes it easy to build simple,reliable,and efficient software")
 _,err=file.Write(content)
 if err!=nil {
 fmt.Println(err)
 }
 fmt.Println("write file successful")
}

方法三:通过有缓冲操作的bufio提供的包进行操作

如果使用Write方法实现写操作,此时就还需要使用Flush()方法。 golang bufio包中的Write方法分析

package main

func main(){
 file,err:=os.OpenFile("a.txt", os.O_CREATE|os.O_RDWR, 0666)
 if err!=nil {
 fmt.Println(err)
 }
 defer file.Close()

 content:=[]byte("Go is an open source programing language that makes it easy to build simple,reliable,and efficient software")
 //使用NewWriter方法返回的io.Writer缓冲默认大小为4096,也可以使用NewWriterSize方法设置缓存的大小
 newWriter:=bufio.NewWriter(file)
 //将文件写入缓存
 if _,err =newWriter.Write(content);err!=nil {
 fmt.Println(err)
 }
 //从缓存写入到文件中
 if err= newWriter.Flush(); err!=nil {
 fmt.Println(err)
 }
 fmt.Println("write file successful")
}

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

相关文章

  • GO语言协程创建使用并通过channel解决资源竞争

    GO语言协程创建使用并通过channel解决资源竞争

    这篇文章主要为大家介绍了GO语言协程创建使用并通过channel解决资源竞争,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪
    2022-04-04
  • go语言工程结构

    go语言工程结构

    这篇文章主要简单介绍了go语言工程结构,对于我们学习go语言很有帮助,需要的朋友可以参考下
    2015-01-01
  • Golang定时任务框架GoCron的源码分析

    Golang定时任务框架GoCron的源码分析

    本文主要介绍了Golang定时任务框架GoCron的源码分析,原生的gocron存在一些问题,如任务列表维护不当、并发操作不可预测等,经过改进的gocron解决了这些问题,感兴趣的可以了解一下
    2025-03-03
  • Go语言开发保证并发安全实例详解

    Go语言开发保证并发安全实例详解

    这篇文章主要为大家介绍了Go语言开发保证并发安全实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • Golang关键字select的常用用法总结

    Golang关键字select的常用用法总结

    这篇文章主要为大家详细介绍了golang中select关键字的常用用法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-10-10
  • Go语言正则表达式用法实例小结【查找、匹配、替换等】

    Go语言正则表达式用法实例小结【查找、匹配、替换等】

    这篇文章主要介绍了Go语言正则表达式用法,结合实例形式分析了Go语言基于正则实现查找、匹配、替换等基本操作的实现技巧,需要的朋友可以参考下
    2017-01-01
  • 在Go语言开发中实现高性能的分布式日志收集的方法

    在Go语言开发中实现高性能的分布式日志收集的方法

    本文介绍了在Go语言开发中实现高性能分布式日志收集的关键步骤和考虑因素,包括日志生成与采集、日志传输、日志收集器的高性能网络I/O、日志存储与分析、监控与告警系统、扩展性与可维护性等方面,本文给大家介绍的非常详细,感兴趣的朋友一起看看吧
    2025-01-01
  • Go语言中实现enum枚举的方法详解

    Go语言中实现enum枚举的方法详解

    枚举,即 enum,可用于表示一组范围固定的值,它能助我们写出清晰、安全的代码,那么你是否了解过 Go 中的枚举呢?下面就跟随小编一起来学习一下Go语言中实现enum枚举的常用方法吧
    2024-02-02
  • 提高golang源码阅读效率的六个高级技巧

    提高golang源码阅读效率的六个高级技巧

    随着业务的发展,自己对代码的审美的改变,我们不断的迭代这些代码,代码量可以说是与日俱增,代码的某些结构也会发生大大小的改变,这些都要求我们在阅读代码的时候,需要更快的效率和技巧
    2024-01-01
  • Go使用缓存加速外部资源访问提高性能效率

    Go使用缓存加速外部资源访问提高性能效率

    缓存是架构设计中的常用概念,本文基于Go实现了一个简单的缓存组件,支持最基本的缓存操作,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10

最新评论