go语言中对文件的基本操作

一. 基本案例

package main

import (
    "bufio" // 引入缓冲读写包
    "fmt"   // 引入格式化输出包
    "io"    // 引入基本的I/O操作包
    "os"    // 引入操作系统接口包
)

func main() {
    // 读取文件案例演示区域
    //test00()
    fmt.Println("-----------------------------------")
    //test01()
    fmt.Println("-----------------------------------")
    //test02()
    fmt.Println("----------------写出文件-------------------")
    //test03()
    fmt.Println("-----------------------------------")
    //test04()
    //test05()
    test06()
}

// 读取内容显示再写入追加内容
func test06() {
    filepath := "d:/abc.txt"
    file, err := os.OpenFile(filepath, os.O_RDWR, 0666) // 读写模式打开 权限为666在wins没有作用
    if err != nil {
       fmt.Println(err)
    }
    defer file.Close()
    // 读取文件内容
    reader := bufio.NewReader(file)
    for {
       readString, err := reader.ReadString('\n')
       if err == io.EOF {
          break
       }
       fmt.Print(readString)
    }
    // 写入内容
    writer := bufio.NewWriter(file)
    for i := 0; i < 5; i++ {
       writer.WriteString("我是djjjjjjjjjjjjjj~~~\n")
    }
    writer.Flush()
}

// 在原来的内容上追加内容
func test05() {
    filepath := "d:/abc.txt"                                         // 文件路径
    file, err := os.OpenFile(filepath, os.O_WRONLY|os.O_APPEND, 666) // 打开指定路径的文件,以写入模式并追加到文件末尾,权限为666

    defer file.Close() // 延迟关闭文件
    if err != nil {
       fmt.Println(err) // 打印错误信息
    }
    writer := bufio.NewWriter(file) // 创建写入器
    for i := 0; i < 10; i++ {
       writer.WriteString("我是灰灰灰~999\n") // 写入字符串到写入器
    }
    writer.Flush() // 刷新写入器
}

// 清空文件并重新写入内容
func test04() {
    filepath := "d:/abc.txt"                                        // 文件路径
    file, err := os.OpenFile(filepath, os.O_WRONLY|os.O_TRUNC, 666) // 以写入模式打开文件,并清空原有内容
    defer file.Close()                                              // 延迟关闭文件
    if err != nil {
       fmt.Println(err) // 打印错误信息
    }
    writer := bufio.NewWriter(file) // 创建写入器
    for i := 0; i < 10; i++ {
       writer.WriteString("我是渣渣灰~一999\n") // 写入字符串到写入器
    }
    writer.Flush() // 刷新写入器
}

// 写出文件函数
// 此函数用于打开指定路径的文件并进行写入操作
func test03() {
    filepath := "d:/abc.txt"                                          // 设置文件路径
    file, err := os.OpenFile(filepath, os.O_WRONLY|os.O_CREATE, 0666) // 打开或创建文件,设置为写模式
    defer file.Close()                                                // 确保关闭文件资源
    if err != nil {
       fmt.Println(err)
    }
    // 创建带缓冲的写入器
    writer := bufio.NewWriter(file)
    str := "Hello coderyeah!\n"
    for i := 0; i < 5; i++ {
       writeString, _ := writer.WriteString(str) // 将字符串写入缓冲区,并返回写入字符个数
       fmt.Println(writeString)
    }
    // 刷新缓冲区,确保数据真正写入到文件中
    writer.Flush()
    fmt.Println("写入完成")
}

// 适用于读取较小文件的函数
// 此函数一次性读取指定路径的整个文件内容
func test02() {
    filePath := "d:/testgo.txt"
    // 使用os.ReadFile替代ioutil.ReadFile一次性读取文件内容
    str, err := os.ReadFile(filePath)
    if err != nil {
       fmt.Println(err)
    }
    // 输出读取到的文件内容
    fmt.Print(string(str))
}

// 缓冲读取文件函数
// 此函数适用于读取较大的文件,通过逐行读取方式减少内存占用
func test01() {
    file, err := os.Open("d:/testgo.txt") // 打开文件
    if err != nil {
       fmt.Println(err)
    }
    defer file.Close() // 关闭文件资源

    // 创建一个缓冲读取器
    reader := bufio.NewReader(file)

    for {
       // 读取一行数据直到遇到换行符
       str, err := reader.ReadString('\n')
       if err == io.EOF { // 如果读到文件末尾
          fmt.Println(err)
          break
       }
       fmt.Print(str) // 输出当前行的内容
    }

    fmt.Println("文件读取结束")
}

// 直接读取文件函数
// 此函数以块的形式读取文件内容
func test00() {
    file, err := os.Open("d:/testgo.txt")
    if err != nil {
       fmt.Println(err)
    }

    fmt.Println(file) // 输出文件对象

    var b []byte         // 定义一个字节切片
    b = make([]byte, 50) // 初始化切片大小为50

    for {
       // 从文件中读取数据到b切片
       n, err := file.Read(b)
       fmt.Println(n, string(b[:n])) // 输出读取的字节数和对应的字符串内容
       if err != nil {
          if err == io.EOF {
             fmt.Println("EOF:", err) // 输出EOF信息
          } else {
             fmt.Println("err:", err) // 输出其他错误信息
          }
          break
       }
    }

    // 使用匿名函数实现延迟关闭文件
    defer func(file *os.File) {
       err := file.Close()
       if err != nil {
          fmt.Println(err)
       }
    }(file)
}

你可能感兴趣的:(golang,开发语言,后端)