zoukankan      html  css  js  c++  java
  • Golang 中对文件 file 操作方法总结

    创建文件

    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 ", 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(' ') 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) } }

    写入文件

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

    ————————————————

    PS

  • 相关阅读:
    MFC中char*,string和CString之间的转换
    图像分割之(四)OpenCV的GrabCut函数使用和源码解读
    自然图像抠图/视频抠像技术发展情况梳理
    OpenCV混合高斯模型函数注释说明
    Effective STL 为包含指针的关联容器指定比较类型
    vs2010修改状态栏的CStatusBar指针的的SetPaneText()方法时死活不对问题
    windows c/c++ 代码运行时间,毫秒级
    【Math】根据置信度、样本数相关推导过程
    宝宝加减法出题小程序
    混淆矩阵
  • 原文地址:https://www.cnblogs.com/pscc/p/12360415.html
Copyright © 2011-2022 走看看