• go语法:file


    参考:

    https://www.cnblogs.com/shiluoliming/p/8312928.html(简单写文件操作的4种方法)

    创建文件

    import (
        "bufio" //缓存IO
        "fmt"
        "io"
        "io/ioutil" //io 工具包
        "os"
    )
    //变量
    var wireteString = "测试n"
    var filename = "./output1.txt"
    var f *os.File
    
    //方式一:
    f, err1 = os.Create(filename) //创建文件
    f, err1 = os.OpenFile(filename, os.O_APPEND, 0666) //打开文件,可以包含创建
    
    //方式二:ioutil.WriteFile创建并写入:
    var d1 = []byte(wireteString) 
    err2 := ioutil.WriteFile("./output2.txt", d1, 0666) //写入文件(字节数组)
    底层原理:os.WriteFile(filename, data, perm) f = os.OpenFile(name, O_WRONLY|O_CREATE|O_TRUNC, perm) f.Write(data)

    写文件(追加或修改,取决于打开文件的方式)

    //方式1
    n, err1 := io.WriteString(f, wireteString) //写入文件(字符串)
    
    //方式2
    var d1 = []byte(wireteString)
    n2, err3 := f.Write(d1) //写入文件(字节数组)
    
    //方式3
    n3, err3 := f.WriteString("writesn") //写入文件(字节数组)
    
    //方式4
    w := bufio.NewWriter(f) //创建新的 Writer 对象
    n4, err3 := w.WriteString("bufferedn")
    fmt.Printf("写入 %d 个字节n", n4)
    w.Flush()

    读文件

    //方式1:将整个文件读取到内存:
    当文件非常大时,尤其在 RAM 存储量不足的情况下,把整个文件都读入内存是没有意义的。更好的方法是分块读取文件。这可以使用 bufio 包来完成。
    #1.1
    data, err := ioutil.ReadFile("test.txt")
    if err != nil {
            fmt.Println("File reading error", err)
            return
    }
    fmt.Println("Contents of file:", string(data))
    
    #1.2同上
    f, err := os.Open("file/test")
    if err != nil {
            fmt.Println("read file fail", err)
            return ""
    }
    defer f.Close()
    
    fd, err := ioutil.ReadAll(f)
    if err != nil {
            fmt.Println("read to fd fail", err)
            return ""
    }
    
    return string(fd)
    
    //方式2:逐行读取
    2.1
    file, err := os.Open("app-2019-06-01.log")
    if err != nil {
            log.Fatal(err)
    }
    defer file.Close()
    scanner := bufio.NewScanner(file)
    for scanner.Scan() {
                lineText := scanner.Text()
    }
    
    2.2
    file, err := os.Open("filetoread.txt")
    if err != nil {
        fmt.Println(err)
        return
    }
    defer file.Close()
    
    scanner := bufio.NewScanner(file)
    scanner.Split(bufio.ScanLines)
    
    // 这是我们的缓冲区
    var lines []string
    
    for scanner.Scan() {
        lines = append(lines, scanner.Text())
    }
    
    fmt.Println("read lines:")
    for _, line := range lines {
        fmt.Println(line)
    }
    
    //方式3:按字节读取
    f, err := os.Open("file/test")
    
    //把file读取到缓冲区中
    defer f.Close()
    var chunk []byte
    buf := make([]byte, 1024)
    
    for {
            //从file读取到buf中
            n, err := f.Read(buf)
            if err != nil && err != io.EOF{
                fmt.Println("read buf fail", err)
                return ""
            }
            //说明读取结束
            if n == 0 {
                break
            }
            //读取到最终的缓冲区中
            chunk = append(chunk, buf[:n]...)
    }
    
    return string(chunk)
  • 相关阅读:
    当模型验证未通过时,获取未通过验证的属性
    在ASP.Net MVC中进行身份认证
    c#生成验证码
    HTTP与FTP状态码
    VUEX
    JS模块化
    Vue.JS入门下
    flex布局
    asp.net Web API
    JWT加密解密
  • 原文地址:https://www.cnblogs.com/tkzc2013/p/15157020.html
Copyright © 2020-2023  润新知