专注于 JetBrains IDEA 全家桶,永久激活,教程
持续更新 PyCharm,IDEA,WebStorm,PhpStorm,DataGrip,RubyMine,CLion,AppCode 永久激活教程

go语言对文件的操作总结

一、在go中判断是文件夹还是文件夹的操作

package main

import (
    "fmt"
    "os"
)

// 传递一个路径进去
func IsFile(path string) bool {
    file, err := os.Stat(path)
    if err != nil {
        return false
    }
    return !file.IsDir()
}

func main() {
    isFile := IsFile("./11.txt")
    if isFile {
        fmt.Println("是文件")
    } else {
        fmt.Println("不是文件")
    }
}

二、判断文件或者文件夹是否存在

package main

import (
    "fmt"
    "os"
)

// 使用os.Stat()函数返回的错误值来判断
// 1.如果返回的错误为nil,说明文件或文件夹存在
// 2.如果返回的错误类型使用os.IsNotExist()判断为true,说明文件或文件夹不存在
// 3.返回的错误类型,不能确定是否存现
func PathExists(path string) (bool, error) {
    _, err := os.Stat(path)
    if err == nil {
        return true, nil
    }
    if os.IsNotExist(err) {
        return false, nil
    }
    return false, err
}

func main() {
    ok, err := PathExists("./11.txt")
    if ok {
        fmt.Println("文件存在")
    } else {
        fmt.Println("文件不存在")
    }
    if err != nil {
        fmt.Println("不能确定是否存现")
    }
}

三、读文件的几种方式

  • 1、使用os.Open()打开文件和bufio.NewReader显示到终端
    package main

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

    func main() {
        // 打开文件
        file, err := os.Open("./11.txt")
        if err != nil {
            fmt.Println("打开失败")
        }
        defer file.Close()

        // 读取文件
        reader := bufio.NewReader(file)
        // 循环读文件
        for {
            str, err := reader.ReadString('\n') // 以为\n来读
            // 当读写完成后
            if err == io.EOF {
                break
            }
            fmt.Print(str)
        }
    }

  • 2、使用ioutil.ReadFile直接读取出来的
    package main

    import (
        "fmt"
        "io/ioutil"
    )

    func main() {
        content, err := ioutil.ReadFile(11.txt)
        if err != nil {
            fmt.Println("打开文件失败")
        }
        fmt.Printf("%v", string(content))
    }

四、使用os.OpenFile读写文件

  • 1、参数介绍
    // 第一个参数的文件路径,第二个参数打开文件的方式,第三个参数是随便写的整数
    /**
        O_RDONLY int = syscall.O_RDONLY // 只读模式打开文件
        O_WRONLY int = syscall.O_WRONLY // 只写模式打开文件
        O_RDWR   int = syscall.O_RDWR   // 读写模式打开文件
        O_APPEND int = syscall.O_APPEND // 写操作时将数据附加到文件尾部
        O_CREATE int = syscall.O_CREAT  // 如果不存在将创建一个新文件
        O_EXCL   int = syscall.O_EXCL   // 和O_CREATE配合使用,文件必须不存在
        O_SYNC   int = syscall.O_SYNC   // 打开文件用于同步I/O
        O_TRUNC  int = syscall.O_TRUNC  // 如果可能,打开时清空文件
     */

  • 2、案例一:普通的写入一个文件
    package main

    import (
        "bufio"
        "fmt"
        "os"
    )

    func main() {
        file, err := os.OpenFile("./11.txt", os.O_WRONLY|os.O_CREATE, 1111)
        if err != nil {
            fmt.Println("打开文件失败")
        }
        defer file.Close()
        str := "水痕111\n"
        writer := bufio.NewWriter(file)
        for i := 0; i < 10; i++ {
            // 因为writer是带缓存的,因此在调用WriteString方法的时候,其实是先将内容写到缓存中,所以需要调用
            // Flush方法,将缓冲的数据真实的写入到文件中,否则文件中没有数据
            writer.WriteString(str)
            writer.Flush()
        }
    }

  • 3、案例二:覆盖之前的文件写入
    package main

    import (
        "bufio"
        "fmt"
        "os"
    )

    func main() {
        file, err := os.OpenFile("./11.txt", os.O_WRONLY | os.O_TRUNC, 111)
        if err != nil {
            fmt.Println("打开文件失败")
        }
        defer file.Close()

        str :="你好\r\n"
        writer := bufio.NewWriter(file)
        for i := 0; i< 10; i++ {
            writer.WriteString(str)
        }
        writer.Flush()
    }

  • 4、案例三:追加的方式写入文件
    package main

    import (
        "bufio"
        "fmt"
        "os"
    )

    func main() {
        file, err := os.OpenFile("./11.txt", os.O_WRONLY|os.O_APPEND, 1111)
        if err != nil {
            fmt.Println("打开文件失败")
        }
        defer file.Close()

        str := "中国你好\r\n"
        writer := bufio.NewWriter(file)
        for i := 0; i < 10; i++ {
            writer.WriteString(str)
        }
        writer.Flush()
    }

  • 5、案例四:读写一起使用
    package main

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

    func main() {
        file, err := os.OpenFile("./11.txt", os.O_RDWR|os.O_APPEND, 1111)
        if err != nil {
            fmt.Println("打开文件失败")
        }
        defer file.Close()
        reader := bufio.NewReader(file)
        for {
            str, err := reader.ReadString('\n')
            if err == io.EOF {
                break
            }
            fmt.Println(str)
        }
        fmt.Println("-----------结束显示-----------")
        str := "中国你好\r\n"
        writer := bufio.NewWriter(file)
        for i := 0; i < 10; i++ {
            writer.WriteString(str)
        }
        writer.Flush()
        fmt.Println("-----------输入完成-----------")
    }

五、文件的拷贝

  • 1、文件内容的拷贝(已知两个文件都存在)
    package main

    import (
        "fmt"
        "io/ioutil"
    )

    func main() {
        data, err := ioutil.ReadFile("./11.txt")
        if err != nil {
            fmt.Println("读文件错误")
        }
        err = ioutil.WriteFile("./22.txt", data, 111)
        if err != nil {
            fmt.Println("写入文件错误")
        }
    }

  • 2、整个文件的拷贝
    package main

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

    func CopyFile(dstFileName string, srcFileName string) (written int64, err error) {
        srcFile, err := os.Open(srcFileName)
        if err != nil {
            fmt.Println("打开文件失败")
        }
        defer srcFile.Close()
        reader := bufio.NewReader(srcFile)

        dstFile, err := os.OpenFile(dstFileName, os.O_WRONLY|os.O_CREATE, 111)
        if err != nil {
            fmt.Println("打开失败")
        }
        writer := bufio.NewWriter(dstFile)
        defer dstFile.Close()
        return io.Copy(writer, reader)
    }

未经允许不得转载:搜云库技术团队 » go语言对文件的操作总结

JetBrains 全家桶,激活、破解、教程

提供 JetBrains 全家桶激活码、注册码、破解补丁下载及详细激活教程,支持 IntelliJ IDEA、PyCharm、WebStorm 等工具的永久激活。无论是破解教程,还是最新激活码,均可免费获得,帮助开发者解决常见激活问题,确保轻松破解并快速使用 JetBrains 软件。获取免费的破解补丁和激活码,快速解决激活难题,全面覆盖 2024/2025 版本!

联系我们联系我们