欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-03-06 09:07:20
文件目录的创建和删除 package main import( "fmt" "os" ) func main(){ //创建目录和权...

文件目录的创建和删除

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")
}

总结

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