golang之文件操作

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

:数据从数据源(文件)和程序(内存)之间经历的路径

输入流:数据从数据源(文件)到程序(内存)的路径

输出流:数据从程序(内存)到数据源(文件)的路径

 

读文件方式:

  1.带缓冲区的方式,os.Open, file.Close, bufio.NewReader(), reader.ReadString函数和方法:

  

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

    defer file.Close()

    reader := bufio.NewReader(file)
    for {
        str, err := reader.ReadString('\n')
        fmt.Print(str)
        if err == io.EOF {
            break
        }
    }
}

   2.使用ioutil一次将整个文件读入到内存中,这种方式适用于文件不大的情况。 相关的方法和函数(ioutil.ReadFile):

 

func main() {
    content, err := ioutil.ReadFile("b.txt")
    if err != nil {
        fmt.Println("reard file err=", err)
    }
    fmt.Printf("%v", string(content))
}

  

写文件方式:

  1.使用缓存bufio.NewWriter()

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

    defer file.Close()
    str := "hello world\n"
    writer := bufio.NewWriter(file)
    for i := 0; i < 5; i++ {
        writer.WriteString(str)
    }
    writer.Flush()
}

  2.从一个文件读取内容后写入到另一个文件:ioutil.WriteFile,   ioutil.ReadFile

func main() {
    data, err := ioutil.ReadFile("a.txt")
    if err != nil {
        fmt.Println("read file is err=", err)
        return
    }

    err = ioutil.WriteFile("b.txt", data, 0666)
    if err != nil {
        fmt.Println("read file is err=", err)
    }
}

 

判断文件是否存在

golang判断文件或文件夹是否存在的方法为使用os.Stat()函数返回的错误值进行判断:

  1)如果返回的错误为nil,说明文件或文件夹存在;

  2)如果返回的错误类型使用os.IsNotExits()判断为true,说明文件或文件夹不存在;

  3)如果返回的错误为其它类型,则不确定是否存在

func PathExits(path string) (bool, error) {
    _, err := os.Stat(path)
    if err == nil {
        return true, nil
    }
    if os.IsNotExist(err) {
        return false, nil
    }
    return false, err
}
posted @ 2020-01-20 21:38  顽强的allin  阅读(550)  评论(0编辑  收藏  举报