第05天(異常、文本文件處理)_04

15_設(shè)備文件的使用.go

package main

import (
    "fmt"
    "os"
)

func main() {
    //os.Stdout.Close() //關(guān)閉后,無(wú)法輸出
    //fmt.Println("are u ok?") //往標(biāo)準(zhǔn)輸出設(shè)備(屏幕)寫(xiě)內(nèi)容
    //標(biāo)準(zhǔn)設(shè)備文件(os.Stdout),默認(rèn)已經(jīng)打開(kāi),用戶可以直接使用
    //os.Stdout
    os.Stdout.WriteString("are u ok?\n")
    //os.Stdin.Close() //關(guān)閉后,無(wú)法輸入
    var a int
    fmt.Println("請(qǐng)輸入a: ")
    fmt.Scan(&a) //從標(biāo)準(zhǔn)輸入設(shè)備中讀取內(nèi)容,放在a中
    fmt.Println("a = ", a)
}

16_文件的讀寫(xiě).go

package main

import (
    "bufio"
    "fmt"
    "io"
    "os"
)

func WriteFile(path string) {
    //打開(kāi)文件,新建文件
    f, err := os.Create(path)
    if err != nil {
        fmt.Println("err = ", err)
        return
    }
    //使用完畢,需要關(guān)閉文件
    defer f.Close()
    var buf string
    for i := 0; i < 10; i++ {
        //"i = 1\n", 這個(gè)字符串存儲(chǔ)在buf中
        buf = fmt.Sprintf("i = %d\n", i)
        //fmt.Println("buf = ", buf)
        n, err := f.WriteString(buf)
        if err != nil {
            fmt.Println("err = ", err)
        }
        fmt.Println("n = ", n)
    }
}

func ReadFile(path string) {
    //打開(kāi)文件
    f, err := os.Open(path)
    if err != nil {
        fmt.Println("err = ", err)
        return
    }
    //關(guān)閉文件
    defer f.Close()
    buf := make([]byte, 1024*2) //2k大小
    //n代表從文件讀取內(nèi)容的長(zhǎng)度
    n, err1 := f.Read(buf)
    if err1 != nil && err1 != io.EOF { //文件出錯(cuò),同時(shí)沒(méi)有到結(jié)尾
        fmt.Println("err1 = ", err1)
        return
    }
    fmt.Println("buf = ", string(buf[:n]))
}

//每次讀取一行
func ReadFileLine(path string) {
    //打開(kāi)文件
    f, err := os.Open(path)
    if err != nil {
        fmt.Println("err = ", err)
        return
    }
    //關(guān)閉文件
    defer f.Close()
    //新建一個(gè)緩沖區(qū),把內(nèi)容先放在緩沖區(qū)
    r := bufio.NewReader(f)
    for {
        //遇到'\n'結(jié)束讀取, 但是'\n'也讀取進(jìn)入
        buf, err := r.ReadBytes('\n')
        if err != nil {
            if err == io.EOF { //文件已經(jīng)結(jié)束
                break
            }
            fmt.Println("err = ", err)
        }
        fmt.Printf("buf = #%s#\n", string(buf))
    }
}

func main() {
    path := "./demo.txt"
    //WriteFile(path)
    //ReadFile(path)
    ReadFileLine(path)
}

17_拷貝文件.go

package main

import (
    "fmt"
    "io"
    "os"
)

func main() {
    list := os.Args //獲取命令行參數(shù)
    if len(list) != 3 {
        fmt.Println("usage: xxx srcFile dstFile")
        return
    }

    srcFileName := list[1]
    dstFileName := list[2]
    if srcFileName == dstFileName {
        fmt.Println("源文件和目的文件名字不能相同")
        return
    }

    //只讀方式打開(kāi)源文件
    sF, err1 := os.Open(srcFileName)
    if err1 != nil {
        fmt.Println("err1 = ", err1)
        return
    }

    //新建目的文件
    dF, err2 := os.Create(dstFileName)
    if err2 != nil {
        fmt.Println("err2 = ", err2)
        return
    }

    //操作完畢,需要關(guān)閉文件
    defer sF.Close()
    defer dF.Close()

    //核心處理,從源文件讀取內(nèi)容,往目的文件寫(xiě),讀多少寫(xiě)多少
    buf := make([]byte, 4*1024) //4k大小臨時(shí)緩沖區(qū)
    for {
        n, err := sF.Read(buf) //從源文件讀取內(nèi)容
        if err != nil {
            fmt.Println("err = ", err)
            if err == io.EOF { //文件讀取完畢
                break
            }
        }
        //往目的文件寫(xiě),讀多少寫(xiě)多少
        dF.Write(buf[:n])
    }
}

課堂筆記

設(shè)備文件:
屏幕(標(biāo)準(zhǔn)輸出設(shè)備)  fmt.Println()   往標(biāo)準(zhǔn)輸出設(shè)備寫(xiě)內(nèi)容
鍵盤(標(biāo)準(zhǔn)輸入設(shè)備)  fmt.Scan()      從標(biāo)準(zhǔn)輸入設(shè)備讀取內(nèi)容

磁盤文件,放在存儲(chǔ)設(shè)備上的文件
1) 文本文件     以記事本打開(kāi),能看到內(nèi)容(不是亂碼)
2) 二進(jìn)制文件    以記事本打開(kāi),能看到內(nèi)容(是亂碼)

為什么需要文件??jī)?nèi)存掉電丟失,程序結(jié)束,內(nèi)存中的內(nèi)容消失
文件放磁盤,程序結(jié)束,文件還是存在
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容