zoukankan      html  css  js  c++  java
  • Go基础编程实践(六)—— 文件

    检查文件是否存在

    在此程序同目录下创建log.txt文件,以检测。

    package main
    
    import (
        "os"
        "fmt"
    )
    
    func main() {
        if _, err := os.Stat("log.txt"); err  == nil {
            fmt.Println("Log.txt file exists")
        }
    }
    

    检查文件是否不存在

    package main
    
    import (
        "os"
        "fmt"
    )
    
    func main() {
        // IsNotExist函数定义:func IsNotExist(err error) bool
        // 返回一个布尔值说明该错误是否表示一个文件或目录不存在
        if _, err := os.Stat("log.txt"); os.IsNotExist(err) {
            fmt.Println("Log.txt file does not exist")
        } else {
            fmt.Println("Log.txt file exists")
        }
    }
    

    读取文件内容

    在此程序同目录下创建name.txt文件,以检测。

    package main
    
    import (
        "io/ioutil"
        "fmt"
    )
    
    func main() {
        contentBytes, err := ioutil.ReadFile("name.txt")
        if err == nil {
            // ReadFile返回[]byte
            fmt.Println(string(contentBytes))
        }
    }
    

    写入文件

    在此程序同目录下创建hello_world文件。

    package main
    
    import (
        "io/ioutil"
        "fmt"
    )
    
    func main() {
        hello := "Hello, World"
        // WriteFile接受三个参数,要写入的文件名,写入的[]byte,以及写入权限
        err := ioutil.WriteFile("hello_world", []byte(hello), 0644)
        if err != nil {
            fmt.Println(err)
        }
    }
    

    创建临时文件

    package main
    
    import (
        "io/ioutil"
        "fmt"
    )
    
    func main() {
        helloWorld := "Hello, World"
        // TempFile定义:func TempFile(dir, prefix string) (f *os.File, err error)
        // 在dir目录下创建一个新的、使用prefix为前缀的临时文件,
        // 以读写模式打开该文件并返回os.File指针。
        file, err := ioutil.TempFile("", "hello_world_temp")
        if err != nil {
            panic(err)
        }
        // defer os.Remove(file.Name())
        if _, err := file.Write([]byte(helloWorld)); err != nil {
            panic(err)
        }
        fmt.Println(file.Name())
    }
    

    计算文件行数

    在程序同目录下创建"names.txt"文件,随便写几行字。

    package main
    
    import (
        "os"
        "bufio"
        "fmt"
    )
    
    func main() {
        file, _ := os.Open("names.txt")
        fileScanner := bufio.NewScanner(file)
        lineCount := 0
        for fileScanner.Scan() {
            lineCount++
        }
        defer file.Close()
        fmt.Println(lineCount)
    }
    

    读取文件特定行

    package main
    
    import (
        "os"
        "bufio"
        "fmt"
    )
    
    func main() {
        fmt.Println(readLine(2))
    }
    
    func readLine(lineNumber int) string {
        file, _ := os.Open("names.txt")
        fileScanner := bufio.NewScanner(file)
        lineCount := 0
        for fileScanner.Scan() {
            if lineCount == lineNumber {
                return fileScanner.Text()
            }
            lineCount++
        }
        defer file.Close()
        return ""
    }
    

    比较两个文件的内容

    package main
    
    import (
        "fmt"
        "io/ioutil"
        "bytes"
    )
    
    func main() {
        one, err := ioutil.ReadFile("one.txt")
        if err != nil {
            panic(err)
        }
        two, err2 := ioutil.ReadFile("two.txt")
        if err2 != nil {
            panic(err2)
        }
        // Equal返回bool值
        same := bytes.Equal(one, two)
        fmt.Println(same)
    }
    

    删除文件

    package main
    
    import "os"
    
    func main() {
        err := os.Remove("new.txt")
        if err != nil {
            panic(err)
        }
    }
    

    复制或移动文件

    package main
    
    import (
        "os"
        "io"
    )
    
    func main() {
        original, err := os.Open("original.txt")
        if err != nil {
            panic(err)
        }
        defer original.Close()
        original_copy, err2 := os.Create("copy.txt")
        if err2 != nil {
            panic(err2)
        }
        defer original_copy.Close()
        // Copy(1, 2) -> 把2拷贝到1
        _, err3 := io.Copy(original_copy, original)
        if err3 != nil {
            panic(err3)
        }
    }
    // 移动文件:拷贝之后利用os.Remove()删除原文件
    

    重命名文件

    package main
    
    import "os"
    
    func main() {
        os.Rename("old.txt", "new.txt")
    }
    

    删除目录及文件

    package main
    
    import (
        "os"
        "fmt"
    )
    
    func main() {
        // Remove无法删除非空文件夹,RemoveAll可以
        err := os.RemoveAll("hello")
        if err != nil {
            panic(err)
        }
    }
    

    列出目录下所有文件

    创建一个hello文件夹,在文件夹内创建两个文件,main文件和hello文件夹并列。

    .
    ├── hello
    │   ├── 1.txt
    │   └── 2.txt
    └── main.go
    
    package main
    
    import (
        "io/ioutil"
        "fmt"
    )
    
    func main() {
        files, err := ioutil.ReadDir("hello")
        if err != nil {
            panic(err)
        }
        for _, f := range files {
            fmt.Println(f.Name())
        }
    }
    
  • 相关阅读:
    jquery ajax 向后台传递数组
    定时任务
    C# 好用的插件
    C# 跳出循环
    存储区更新、插入或删除语句影响到了意外的行数(0)。实体在加载后可能被修改或删除。刷新 ObjectS
    Opencv2.4.9源码分析——HoughLinesP
    OpenCV+C++ 视频图片相互转换
    opencv2.2版本不稳定
    OpenCV 透视变换【图像归一化矫正】
    opencv配置注意事项【总结】
  • 原文地址:https://www.cnblogs.com/GaiHeiluKamei/p/11141110.html
Copyright © 2011-2022 走看看