Golang之檔案讀寫

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

讀寫檔案,不添加檔案路徑,預設寫入到GOPATH路徑下

終端讀寫:

源碼

func Sscanffunc 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 mainimport "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 NewReaderfunc NewReader(rd io.Reader) *ReaderNewReader returns a new Reader whose buffer has the default size.

-

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

開啟檔案,讀取

package mainimport (    "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('\n') if err != nil { fmt.Println("read string failed,err:", err) return } fmt.Printf("read str success,result:%s\n", 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 mainimport (    "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('\n')        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 == '\t':                count.SpaceCount++            case v >= '0' && v <= '9':                count.NumCount++            default:                count.OtherCount++            }        }    }    fmt.Printf("char count:%d\n", count.ChCount)    fmt.Printf("num count:%d\n", count.NumCount)    fmt.Printf("space count:%d\n", count.SpaceCount)    fmt.Printf("other count:%d\n", count.OtherCount)}
字元統計

 檔案寫入

--

package mainimport (    "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\n")        return    }    //在函數執行結束前,一定要關閉,謹記    defer outputFile.Close()    outputWriter:=bufio.NewWriter(outputFile)    outputString:="hello world!\n"    for i:=0;i<10;i++{        outputWriter.WriteString(outputString)    }    outputWriter.Flush()//重新整理落地}

golang的複製檔案

package mainimport (    "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 mainimport (    "fmt"    "os")func main() {    fmt.Printf("len of args:%d\n", len(os.Args))    for i, v := range os.Args {        fmt.Printf("args[%d]=%s\n", i, v)    }}

flag包用於實現命令列參數

例如Linux下的 ls -l

package mainimport (    "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)}

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.