go实现文件的创建、删除和读取

栏目: Go · 发布时间: 6年前

内容简介:文件的打开和关闭相关函数在文件的读取和写入示例中演示。方法一: 利用方法二:利用

文件目录的创建和删除

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实现文件的创建、删除和读取》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Programming Ruby

Programming Ruby

Dave Thomas、Chad Fowler、Andy Hunt / Pragmatic Bookshelf / 2004-10-8 / USD 44.95

Ruby is an increasingly popular, fully object-oriented dynamic programming language, hailed by many practitioners as the finest and most useful language available today. When Ruby first burst onto the......一起来看看 《Programming Ruby》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

URL 编码/解码
URL 编码/解码

URL 编码/解码

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具