1. 程式人生 > >2.7 檔案操作1:檔案讀寫的一般操作

2.7 檔案操作1:檔案讀寫的一般操作

匯入依賴

import (
    "os"
    "fmt"
    "time"
    "bufio"
    "io"
    "io/ioutil"
)

開啟和關閉檔案

func main41() {
    //開啟檔案
    filePtr, err := os.Open("d:/小黑子.avi")
    if err != nil {
        fmt.Println("檔案開啟失敗,err=", err)
    } else {
        fmt.Println("檔案開啟成功")
    }

    //關閉
    //defer filePtr.Close
() defer func() { filePtr.Close() fmt.Println("檔案已關閉") }() fmt.Println("愉快滴欣賞avi藝術") time.Sleep(3 * time.Second) }

讀取資料

func main42() {
    //開啟和關閉檔案
    //os.O_RDONLY 以只讀模式開啟
    //0765 檔案主人的許可權7(4+2+1=可讀+可寫+可執行),檔案的使用者組下的人的許可權6(4+2=可讀+可寫),其他人的許可權5(4+1=可讀+可執行)
    filePtr, err := os.OpenFile("d:/abc.txt"
, os.O_RDONLY, 0765) if err != nil { fmt.Println("檔案開啟失敗,err=", err) return } else { fmt.Println("開啟檔案成功") } //開啟時立即掛起關閉程式 defer func() { defer filePtr.Close() fmt.Println("檔案已關閉") }() //建立檔案的讀取器 reader := bufio.NewReader(filePtr) //迴圈讀取
for { //以換行符為界,分批次讀取資料,得到str(str中包括一個換行符) str, err := reader.ReadString('\n') if err != nil { fmt.Println("讀取失敗,err=", err) //如果已到檔案末尾,就結束迴圈 if err == io.EOF { break } } //列印讀到的內容 fmt.Print(str) } fmt.Println("讀取結束") }

讀取資料2

func main43() {
    bytes, err := ioutil.ReadFile("d:/abc.txt")
    if err != nil {
        fmt.Println("讀取失敗,err=", err)
    } else {
        contentStr := string(bytes)
        fmt.Println(contentStr)
    }
}

寫入資料 寫入資料分三種模式 - 創寫模式 - 覆寫模式 - 追加模式

func main44() {

    //開啟並延時關閉檔案
    //創寫模式
    //file, err := os.OpenFile("d:/大黑子.avi", os.O_CREATE|os.O_WRONLY, 0754)
    //覆寫模式
    //file, err := os.OpenFile("d:/兄弟連.txt", os.O_CREATE|os.O_WRONLY|os.O_TRUNC, 0754)
    //追加模式
    file, err := os.OpenFile("d:/兄弟連.txt", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0754)

    if err != nil {
        fmt.Println("檔案開啟失敗,err=", err)
        return
    } else {
        fmt.Println("開啟檔案成功")
    }
    defer file.Close()

    //建立寫入器
    writer := bufio.NewWriter(file)

    //執行帶緩衝的寫入
    writer.WriteString("大海啊你全他媽是水\n")
    writer.WriteString("蜘蛛啊你全他媽是腿\n")
    writer.WriteString("辣椒啊真他媽辣嘴\n")
    writer.WriteString("不好好學習真他媽後悔\n")

    //強制將緩衝區中的內容寫入檔案
    writer.Flush()

    fmt.Println("寫入成功!")
}

判斷檔案是否存在

func CheckIfFileExist(filename string) (exists bool, info string) {
    fileInfo, err := os.Stat(filename)
    fmt.Println(fileInfo, err)
    if fileInfo != nil && err == nil {
        fmt.Printf("%s檔案存在\n", filename)
        exists = true
    } else if os.IsNotExist(err) {
        fmt.Printf("%s檔案不存在\n", filename)
        exists = false
    } else {
        fmt.Println("搞不清存不存在!")
        exists = false
        info = "發生了一些奇奇怪怪的事情..."
    }
    return
}
func main45() {
    CheckIfFileExist("d:/小黑子.avi")
    CheckIfFileExist("d:/小白子.avi")
}

快捷寫入

func main46() {
    //預設模式:os.O_WRONLY|os.O_CREATE|os.O_TRUNC=只寫+不存在就建立+【覆寫模式】
    err := ioutil.WriteFile("d:/abc.txt", []byte("再看我\n再看我就把你喝掉"), 0754)
    if err != nil {
        fmt.Println("寫入失敗")
    } else {
        fmt.Println("寫入成功")
    }
    fmt.Println("寫入結束")
}