随笔 - 133  文章 - 0  评论 - 0  阅读 - 42762

golang读写文件

  • 读文件方式一

    // 方式一,以字节为单位读文件
    package main

    import (
    "fmt"
    "io"
    "os"
    )

    func main() {

    // 获得文件句柄, 只读权限
    f, err := os.Open("文件路径")
    if err != nil {
    fmt.Println("文件打开失败", err)
    return
    }

    defer func() {
    err := f.Close()
    if err != nil {
    fmt.Println("文件关闭失败")
    }
    }()

    // 创建临时数据存放数组
    tmpBuf := make([]byte, 1024)

    // 定义byte数组,用来存放所有数据
    var res []byte
    for {
    count, err := f.Read(tmpBuf)
    // count最大值是tmpBuf的长度

    if err == io.EOF {
    // 读取到了文件末尾
    break
    }
    currBytes := tmpBuf[:count]     // 从临时数组中提取读到的数据
    res = append(res, currBytes...) // 拼接新读取的数据
    }
    fmt.Println(string(res)) // 打印结果
    }
  • 读文件方式二

    // 方式二,一次读取文件全部内容
    package main

    import (
    "fmt"
    "os"
    )

    func main() {
     // 读取文件全部内容,并返回byte数组
    content, err := os.ReadFile("文件路径")
    if err != nil {
    fmt.Println("文件读取失败")
       return
    }
    fmt.Println(string(content))
    }
  • 写文件

    package main

    import (
    "fmt"
    "os"
    )

    func main() {
    // 获得文件句柄,需指定读写方式(第二个参数)和文件权限(第三个参数),文件权限的参数值对应linux下的文件权限数字。
    f, err := os.OpenFile("文件路径", os.O_RDWR|os.O_APPEND|os.O_CREATE, 0664)

    if err != nil {
    fmt.Println("文件打开失败")
    return
    }
     defer func() {
    _ = f.Close()
    }()
    // 要写入的数据
    data := []byte("Hello World!\n")
    // 写入数据,返回写入数据的字节数
    count, err := f.Write(data)
    if err != nil {
    fmt.Println("文件写入失败")
    return
    }
    fmt.Println("写入字节数", count)
    // 刷入磁盘
    _ = f.Sync()
    }

    // 读写方式介绍
    /*
    os.O_CREATE: create if none exists 不存在则创建
    os.O_RDONLY: read-only 只读
    os.O_WRONLY: write-only 只写
    os.O_RDWR: read-write 可读可写
    os.O_TRUNC: truncate when opened 文件长度截为0:即清空文件
    os.O_APPEND: append 追加新数据到文件
    */

    // 权限数字,可搜索linux权限详解。

     

posted on   CJTARRR  阅读(92)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示