最新消息:yaf表单扩展中新增加了浮点数、日期和集合的校验。php yaf框架扩展实践三——表单

golang中文件(file)操作示例

Golang 436浏览 1评论

整理一下golang中关于文件操作的例子。目录结构:

golang文件file操作

golang文件file操作

因为后面都是使用相对路径,如果要执行相应代码,需要在os/file目录下执行,

写入文件

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: 你好,世界!
}

创建文件

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

转载请注明:快乐编程 » golang中文件(file)操作示例

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

网友最新评论 (1)

  1. 简洁通俗易懂,赞一下 :smile:
    失忆d7个月前 (07-28)回复