當前位置: 首頁>>編程語言>>正文


Go語言教程:讀文件

返回Go語言教程首頁

概念簡介

讀寫文件在很多程序中都是必須的基本任務。在這裏我們看看一些Go語言讀文件的例子。

例程代碼


package main

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

// 讀取文件需要經常進行錯誤檢查,這個幫助方法可以精簡下麵
// 的錯誤檢查過程。
func check(e error) {
    if e != nil {
        panic(e)
    }
}

func main() {

    // 也許大部分基本的文件讀取任務是將文件內容讀取到
    // 內存中。
    dat, err := ioutil.ReadFile("/tmp/dat")
    check(err)
    fmt.Print(string(dat))

    // 你經常會想對於一個文件是怎麽讀並且讀取到哪一部分
    // 進行更多的控製。對於這個任務,從使用 `os.Open`
    // 打開一個文件獲取一個 `os.File` 值開始。
    f, err := os.Open("/tmp/dat")
    check(err)

    // 從文件開始位置讀取一些字節。這裏最多讀取 5 個字
    // 節,並且這也是我們實際讀取的字節數。
    b1 := make([]byte, 5)
    n1, err := f.Read(b1)
    check(err)
    fmt.Printf("%d bytes: %s\n", n1, string(b1))

    // 你也可以 `Seek` 到一個文件中已知的位置並從這個位置開
    // 始進行讀取。
    o2, err := f.Seek(6, 0)
    check(err)
    b2 := make([]byte, 2)
    n2, err := f.Read(b2)
    check(err)
    fmt.Printf("%d bytes @ %d: %s\n", n2, o2, string(b2))

    // `io` 包提供了一些可以幫助我們進行文件讀取的函數。
    // 例如,上麵的讀取可以使用 `ReadAtLeast` 得到一個更
    // 健壯的實現。
    o3, err := f.Seek(6, 0)
    check(err)
    b3 := make([]byte, 2)
    n3, err := io.ReadAtLeast(f, b3, 2)
    check(err)
    fmt.Printf("%d bytes @ %d: %s\n", n3, o3, string(b3))

    // 沒有內置的回轉支持,但是使用 `Seek(0, 0)` 實現。
    _, err = f.Seek(0, 0)
    check(err)

    // `bufio` 包實現了帶緩衝的讀取,這不僅對於很多小的讀
    // 取操作能夠提升性能,也提供了很多附加的讀取函數。
    r4 := bufio.NewReader(f)
    b4, err := r4.Peek(5)
    check(err)
    fmt.Printf("5 bytes: %s\n", string(b4))

    // 任務結束後要關閉這個文件(通常這個操作應該在 `Open`
    // 操作後立即使用 `defer` 來完成)。
    f.Close()

}

執行&輸出


$ echo "hello" > /tmp/dat
$ echo "go" >>   /tmp/dat
$ go run reading-files.go 
hello
go
5 bytes: hello
2 bytes @ 6: go
2 bytes @ 6: go
5 bytes: hello

# 下麵我們將看一下寫入文件。

課程導航

學習上一篇:Go語言教程:Base64編碼    學習下一篇:Go語言教程:寫文件

相關資料

本例程github源代碼:https://github.com/xg-wang/gobyexample/tree/master/examples/reading-files

go語言讀文件

本文由《純淨天空》出品。文章地址: https://vimsky.com/zh-tw/article/4109.html,未經允許,請勿轉載。