zoukankan      html  css  js  c++  java
  • Go 文件操作

    一、读取文件

    二、文件写入

    三、文件复制

    1、普通版读取文件

    package main
    
    import (
        "path/filepath"
        "os"
        "log"
        "io"
        "fmt"
    )
    
    func main() {
    
        path, err := filepath.Abs("./")
        if err != nil {
            panic(err)
        }
    
        filePath := path + "/day6/filehandler/openfile.go"
    
        file, err := os.Open(filePath)
        if err != nil {
            log.Printf("Open file: %s failed, err: %sv", filePath, err)
            return
        }
    
        defer file.Close()
    
        var content []byte
        var buf[4096]byte
    
        for {
            n, err := file.Read(buf[:])
            if err != nil && err != io.EOF {
                log.Printf("read file: %s failed, err: %s
    ", filePath, err)
                return
            }
            if err == io.EOF {
                break
            }
    
            fmt.Println("the buff n value is :", n)
            validBuf := buf[0:n]
            content = append(content, validBuf...)
    
        }
        
        fmt.Printf("the file content is: %s
    ", content)
    }
    View Code

    2、ioutil版读取文件

    import (
        "path/filepath"
        "io/ioutil"
        "log"
        "fmt"
    )
    
    func main() {
    
        path, err := filepath.Abs("./")
        if err != nil {
            panic(err)
        }
    
        filePath := path + "/day6/filehandler/normalReadFile.go"
        contentBytes, err := ioutil.ReadFile(filePath)
        if err != nil {
            log.Printf("read file '%s' failed, err : %v
    ", filePath, err)
            return
        }
    
        fmt.Printf("the file content: %s
    ", contentBytes)
    }
    View Code

    3、bufio版读取文件  ( bufio介绍 http://www.okyes.me/2016/05/30/go-bufio.html)

    package main
    
    import (
        "path/filepath"
        "os"
        "log"
        "bufio"
        "io"
        "fmt"
    )
    
    func main() {
    
        path, err := filepath.Abs("./")
        if err != nil {
            panic(err)
        }
    
        filePath := path + "/day6/filehandler/normalReadFile.go"
        file, err := os.Open(filePath)
        if err != nil {
            log.Printf("Open file: %s failed, err: %sv", filePath, err)
            return
        }
        defer file.Close()
    
        reader := bufio.NewReader(file)
        var content []byte
        var buf[4096]byte
        for {
            n, err := reader.Read(buf[:])
            if err != nil && err != io.EOF {
                log.Printf("Read file '%s' failed, err: %sv", filePath, err)
                return
            }
            if err == io.EOF {
                break
            }
    
            validBuf := buf[0:n]
            content = append(content, validBuf...)
        }
    
        fmt.Printf("the file content is: %s", content)
    
    }
    View Code

    4、普通版文件写入

    package main
    
    import (
        "path/filepath"
        "os"
        "fmt"
    )
    
    func main() {
    
        pathStr, err := filepath.Abs("./")
        if err != nil {
            panic(err)
        }
        filePath := pathStr + "/day6/FileWrite/normalWriter"
        file, err := os.Create(filePath)
        if err != nil {
            panic(err)
        }
    
        contentByte := []byte("hello world!!!")
        n, err := file.Write(contentByte)
        if err != nil {
            panic(err)
        }
        fmt.Printf("write byte lenght %d", n)
    
    }
    View Code

    5、ioutil版文件写入

    package main
    
    import (
        "path/filepath"
        "io/ioutil"
    )
    
    func main() {
    
        pathStr, err := filepath.Abs("./")
        if err != nil {
            panic(err)
        }
        filePath := pathStr + "/day6/FileWrite/ioutilWriter"
    
        data := []byte("IOUtil Hello World!!!")
        err = ioutil.WriteFile(filePath, data, 0666)
        if err != nil {
            panic(err)
        }
    }
    View Code

    6、bufio版文件写入

    package main
    
    import (
        "path/filepath"
        "bufio"
        "os"
        "fmt"
    )
    
    func main() {
    
        pathStr, err := filepath.Abs("./")
        if err != nil {
            panic(err)
        }
    
        filePath := pathStr + "/day6/FileWrite/bufioWriter"
        file, err := os.Create(filePath)
        if err != nil {
            panic(err)
        }
    
        // writer := bufio.NewWriter(file)    默认的buffSize为4096
        writer := bufio.NewWriterSize(file, 512)
        dataByte := []byte("Bufio Hello World!!!")
        nn, err := writer.Write(dataByte)
        if err != nil {
            panic(err)
        }
        writer.Flush()
        fmt.Printf("write byte length :%d", nn)
    }
    View Code

    7、文件复制

    package main
    
    import (
        "io"
        "os"
        "path/filepath"
        "log"
    )
    
    func main() {
    
        path, err := filepath.Abs("./")
        if err != nil {
            panic(err)
        }
    
        srcFilePath := path + "/day6/FileRead/normalReadFile.go"
        srcFile, err := os.Open(srcFilePath)
        if err != nil {
            log.Printf("Open file: %s failed, err: %sv", srcFilePath, err)
            return
        }
        defer srcFile.Close()
    
        dstFilePath := path + "/day6/FileCopy/copyNormalReadFile.go"
        desFile, _ := os.OpenFile(dstFilePath, os.O_RDWR|os.O_CREATE, 0666)
        defer desFile.Close()
    
        io.Copy(desFile,srcFile)
    }
    View Code
  • 相关阅读:
    8小时外你做什么?下班后的生活决定你的竞争力
    8个月,一位年轻总裁的坠落:值得所有职业经理人深思
    陈紫熹(帮别人名字作诗)
    年轻人创业尤其要注意的五个基本法则
    解密联想20年的45条法则
    小本创业】30条生意妙经及七大关键感悟
    新时代白领必备的两大“新”能力,你有吗?
    秘笈:送给创业者的19条忠告
    C#计算两个日期之间的差
    tnsnames.ora是什么东东?
  • 原文地址:https://www.cnblogs.com/vincenshen/p/9418418.html
Copyright © 2011-2022 走看看