(三十六)golang--文件的基本操做

文件程序中是以流的形式操做的。緩存

流:數據在數據源(文件)和程序(內存)之間經歷的路徑;函數

輸入流:數據從數據源到程序的路徑;spa

輸出流:數據從程序到數據源的路徑;code

經常使用的文件操做和函數:blog

1.經常使用的文件操做函數和方法(打開和關閉文件)圖片

2.讀取文件中的內榮,並顯示給終端(帶緩衝區的方式),使用os.Open(),file.Close(),bufio.NewReader(),reader.ReadString()內存

3.讀取問價並顯示在終端(使用Ioutil一次將整個文件讀入到內存中) ,這種方式適用於文件不太大狀況下,相關方法ioutil.ReadFilestring

4.寫文件it

(1)建立一個新文件夾,並寫入hello world;io

(2)打開一個存在的文件,並將內容覆蓋爲新的;

(3)打開一個存在的文件,並在末尾追加新內容;

(4)打開一個存在的文件,將原來的內容讀出並顯示在終端,而且追加新內容;

package main

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

func main() {
    filepath := "test.txt"
    //主要是參數的區別
    file, err := os.OpenFile(filepath, os.O_RDWR|os.O_APPEND, 0666)
    if err != nil {
        fmt.Println("open file error=\n", err)
    }

    defer file.Close()

    reader := bufio.NewReader(file)
    for {
        str, err := reader.ReadString('\n')
        if err == io.EOF {
            break
        }
        fmt.Println(str)
    }

    str := "hello world\n"
    writer := bufio.NewWriter(file)
    for i := 0; i < 5; i++ {
        writer.WriteString(str)
    }
    //由於writer是帶緩存的,所以在調用WriteString的時候是先將數據存入到緩存的
    //所以真正寫入到文件中是要用Flush方法,不然文件中會沒有數據
    writer.Flush()
}

5.讀取一個文件中的內容寫到另外一個文件中

6.判斷文件或目錄是否存在 

說明:若是文件夾存在,則返回true,nil;若是文件夾不存在,則返回false,nil;若是返回false,err,則說明是其它錯誤。

7.將一個目錄下的圖片拷貝到另外一個目錄下

package main

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

func copyFile(dstFileName string, srcFileName string) (written int64, err error) {
    srcfile, err := os.Open(srcFileName)
    if err != nil {
        fmt.Println("open file error=", err)
    }
    defer srcfile.Close()
    reader := bufio.NewReader(srcfile)

    dstfile, err := os.OpenFile(dstFileName, os.O_WRONLY|os.O_CREATE, 0666)
    if err != nil {
        fmt.Println("open file error=", err)
    }
    defer dstfile.Close()
    writer := bufio.NewWriter(dstfile)
    return io.Copy(writer, reader)
}
func main() {
    file1path := "D:/dlrb.jpg"
    file2path := "E:/dlrb.jpg"
    _, err := copyFile(file2path, file1path)
    if err == nil {
        fmt.Println("拷貝完成")
    } else {
        fmt.Println("拷貝失敗 error=", err)
    }

}

8.統計文件裏面的不一樣種類字符的個數

func main() {
    file1path := "test1.txt"
    srcfile, err := os.Open(file1path)
    if err != nil {
        fmt.Println("open file error=", err)
        return
    }
    defer srcfile.Close()
    var count charCount
    reader := bufio.NewReader(srcfile)
    for {
        str, err := reader.ReadString('\n')
        if err == io.EOF {
            break
        }
        for _, v := range str {
            fmt.Println(string(v))
            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("字符個數:%v,數字個數:%v,空格個數:%v,其它個數:%v",
        count.chCount, count.numCount, count.spaceCount, count.otherCount)
}
相關文章
相關標籤/搜索