当前位置: 移动技术网 > IT编程>脚本编程>Go语言 > go实现文件的创建、删除与读取示例代码

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

2019年03月19日  | 移动技术网IT编程  | 我要评论
文件目录的创建和删除 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")
}

总结

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

如您对本文有疑问或者有任何想说的,请 点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网