• Golang之文件读写


    读写文件,不添加文件路径,默认写入到GOPATH路径下

    终端读写:

    源码

    func Sscanf
    func Sscanf(str string, format string, a ...interface{}) (n int, err error)
    解释:Sscanf scans the argument string, storing successive space-separated values into successive arguments as determined by the format.
    It returns the number of items successfully parsed. Newlines in the input must match newlines in the format.
    package main
    
    import "fmt"
    
    //终端读写
    type student struct {
        Name  string
        Age   int
        Score float32
    }
    
    func main() {
        var str = "stu01 18 89.92"
        var stu student
        fmt.Sscanf(str, "%s %d %f", &stu.Name, &stu.Age, &stu.Score)
        fmt.Println(stu)
    }

    文本I/O缓冲:

    源码

    func NewReader
    func NewReader(rd io.Reader) *Reader
    NewReader returns a new Reader whose buffer has the default size.

    -

    package main
    
    import (
        "bufio"
        "fmt"
        "os"
    )
    
    func main() {
        reader := bufio.NewReader(os.Stdin)
        str, err := reader.ReadString('
    ')
        if err != nil {
            fmt.Println("read string,err:", err)
            return
        }
        fmt.Printf("read str succ,ret:%s
    ", str)
    }

    打开文件,读取

    package main
    
    import (
        "bufio"
        "fmt"
        "os"
    )
    
    //读取文件
    
    func main() {
        //打开一个文件
        file, err := os.Open("D:/project/src/go_dev/day7/example4/123.log")
        if err != nil {
            fmt.Println("read file err:", err)
            return
        }
        //重点,文件要关闭
        defer file.Close()
        /*
            func NewReaderSize
            func NewReaderSize(rd io.Reader, size int) *Reader
                NewReaderSize returns a new Reader whose buffer has at least the specified size.
                If the argument io.Reader is already a Reader with large enough size, it returns the underlying Reader.
        */
        reader := bufio.NewReader(file)
      //文件若不是换行结尾,就算出错 str, err :
    = reader.ReadString(' ') if err != nil { fmt.Println("read string failed,err:", err) return } fmt.Printf("read str success,result:%s ", str) }

    ReadString源码

        /*
        func (*Reader) ReadString ¶
    
    func (b *Reader) ReadString(delim byte) (string, error)
    ReadString reads until the first occurrence of delim in the input, returning a string containing the data up to and including the delimiter.
        If ReadString encounters an error before finding a delimiter, it returns the data read before the error and the error itself (often io.EOF).
        ReadString returns err != nil if and only if the returned data does not end in delim. For simple uses, a Scanner may be more convenient.
         */

     -读取一行的字符个数

    package main
    
    import (
        "fmt"
        "os"
    )
    
    /*
    从终端读取一行字符串,统计英文、数字、空格以及其他字符的数量
    */
    import (
        "bufio"
        "io"
    )
    
    type CharCount struct {
        ChCount    int
        NumCount   int
        SpaceCount int
        OtherCount int
    }
    
    func main() {
        file, err := os.Open("D:/project/src/go_dev/day7/example4/123.log")
        if err != nil {
            fmt.Println("read file err:", err)
            return
        }
        defer file.Close()
        var count CharCount
        reader := bufio.NewReader(file)
    
        for {
            str, err := reader.ReadString('
    ')
            if err == io.EOF {
                break
            }
            if err != nil {
                fmt.Printf("read file failed,err:%v", err)
                break
            }
            runeArr := []rune(str)
            for _, v := range runeArr {
                switch {
                case v >= 'a' && v <= 'z':
                    fallthrough
                case v >= 'A' && v <= 'Z':
                    count.ChCount++
                case v == ' ' || v == '	':
                    count.SpaceCount++
                case v >= '0' && v <= '9':
                    count.NumCount++
                default:
                    count.OtherCount++
                }
            }
        }
        fmt.Printf("char count:%d
    ", count.ChCount)
        fmt.Printf("num count:%d
    ", count.NumCount)
        fmt.Printf("space count:%d
    ", count.SpaceCount)
        fmt.Printf("other count:%d
    ", count.OtherCount)
    }
    字符统计

     文件写入

    --

    package main
    
    import (
        "bufio"
        "fmt"
        "os"
    )
    func main(){
        outputFile,outputError:=os.OpenFile("output.dat",os.O_WRONLY|os.O_CREATE,0666)
        if outputError!=nil{
            fmt.Printf("An error occurred with file crea ion
    ")
            return
        }
        //在函数执行结束前,一定要关闭,谨记
        defer outputFile.Close()
        outputWriter:=bufio.NewWriter(outputFile)
        outputString:="hello world!
    "
        for i:=0;i<10;i++{
            outputWriter.WriteString(outputString)
        }
        outputWriter.Flush()//刷新落地
    }

    golang的复制文件

    package main
    
    import (
        "fmt"
        "io"
        "os"
    )
    
    func main() {
        //os.Args是string的切片,用来存储所有的命令行参数
        w, err := CopyFile(os.Args[1], os.Args[2])
        if err != nil {
            fmt.Println(err.Error())
        }
        fmt.Println(w)
    }
    func CopyFile(dstName, srcName string) (written int64, err error) {
        src, err := os.Open(srcName)
        if err != nil {
            return
        }
        defer src.Close()
        dst, err := os.OpenFile(dstName, os.O_WRONLY|os.O_CREATE, 0644)
        if err != nil {
            return
        }
        defer dst.Close()
        //把src内容写进dst里面
        return io.Copy(dst, src)
    }

    命令行参数

    package main
    
    import (
        "fmt"
        "os"
    )
    
    func main() {
        fmt.Printf("len of args:%d
    ", len(os.Args))
        for i, v := range os.Args {
            fmt.Printf("args[%d]=%s
    ", i, v)
        }
    }

    flag包用于实现命令行参数

    例如Linux下的 ls -l

    package main
    
    import (
        "flag"
        "fmt"
    )
    //flag包支持命令行参数
    func main() {
        var confPath string
        var logLevel int
        flag.StringVar(&confPath, "c", "", "Please input conf path")
        flag.IntVar(&logLevel, "d", 0, "PLEASE INPUT LOG LEVEL")
        flag.Parse()
        fmt.Println("path:", confPath)
        fmt.Println("log leve:", logLevel)
    }
  • 相关阅读:
    SQL中的cast和convert用法示例
    SpendidCRM:在adminlayout中修改了视图上的字段后,用MyGeneration生成修改脚本
    [转]ASP.NET数据绑定方法
    商城 5051课 纪要
    .net判断用户是否已登录
    Jquery 监视按键,按下回车键触发某方法
    Sharepoint中三个强力的工具(WPManager, OSSEventManager, FriendlyQuery),另增清除已删除用户
    错误处理:此网页不允许使用基本类型"System.Web.UI.MasterPage”该类型未注册为安全类型
    MOSS页面显示“根级别上的数据无效”
    读取/设置超链接或图片类型栏的值
  • 原文地址:https://www.cnblogs.com/pyyu/p/8302196.html
Copyright © 2020-2023  润新知