Golang 中对文件 file 操作方法总结

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/netdxy/article/details/71335094

创建文件

package main

import (
    "fmt"
    "log"
    "os"
)

func main() {
    file, err := os.Create("file.log")
    if err != nil {
        log.Fatalln(err)
    }
    fmt.Println(file)
}

判断文件是否存在

package main

import (
    "fmt"
    "log"
    "os"
)

func main() {
    _, err := os.Stat("file.log")
    if err != nil && !os.IsNotExist(err) {
        log.Fatalln(err)
    }
    if os.IsNotExist(err) {
        fmt.Println("文件不存在")
        return
    }
    fmt.Println("文件存在")
}

创建目录

package main

import (
    "log"
    "os"
)

func main() {
    // 创建当个目录
    err := os.Mkdir("tmp", 0755)
    if err != nil {
        log.Fatalln(err)
    }

    // 递归创建目录
    err = os.MkdirAll("tmp/tmp1/tmp2", 0755)
    if err != nil {
        log.Fatalln(err)
    }
}

写入文件

package main

import (
    "log"
    "os"
)

func main() {
    // 打开一个文件
    // os.O_CREATE 表示文件不存在就会创建
    // os.O_APPEND 表示以追加内容的形式添加
    // os.O_WRONLY 表示只写模式
    // os.O_RDONLY 表示只读模式
    // os.O_RDWR 表示读写模式
    // os.O_EXCL used with O_CREATE, file must not exist
    // os.O_SYNC I/O同步的方式打开
    // os.O_TRUNC if possible, truncate file when opened.
    file, err := os.OpenFile("file.log", os.O_CREATE|os.O_WRONLY, 0600)
    if err != nil {
        log.Fatalln(err)
    }
    // 写入字节流
    n, err := file.Write([]byte("你好"))
    if err != nil {
        log.Fatalln(err)
    }
    // 写入字符串
    m, err := file.WriteString(",世界")
    if err != nil {
        log.Fatalln(err)
    }
    // 在指定的偏移处(offset)写入内容
    _, err = file.WriteAt([]byte("!"), int64(n+m))
    if err != nil {
        log.Fatalln(err)
    }
}

读取文件按字节读取

package main

import (
    "fmt"
    "log"
    "os"
)

func main() {
    file, err := os.OpenFile("file.log", os.O_RDONLY, 0600)
    if err != nil {
        log.Println(err)
    }
    // 按字节读取
    data := make([]byte, 100)
    count, err := file.Read(data)
    if err != nil {
        log.Println(err)
    }
    fmt.Printf("read %d bytes: %q\n", count, data[:count])
    // output: read 14 bytes: "你好,世界!"
}

读取文件一行行读取

package main

import (
    "bufio"
    "fmt"
    "io"
    "log"
    "os"
)

func main() {
    file, err := os.OpenFile("file.log", os.O_RDONLY, 0600)
    if err != nil {
        log.Fatalln(err)
    }
    buff := bufio.NewReader(file)
    for i := 1; ; i++ {
        line, err := buff.ReadBytes('\n')
        if err != nil && err != io.EOF {
            log.Fatalln(err)
        }
        fmt.Printf("%d line: %s", i, string(line))
        // 文件已经到达结尾
        if err == io.EOF {
            break
        }
    }
    // output: 1 line: 你好,世界!

    fmt.Println()
}

读取文件一次读取全部

package main

import (
    "fmt"
    "io/ioutil"
    "log"
)

func main() {
    data, err := ioutil.ReadFile("file.log")
    if err != nil {
        log.Fatalln(err)
    }
    fmt.Println(string(data))
    // output: 你好,世界!
}

猜你喜欢

转载自blog.csdn.net/netdxy/article/details/71335094