清華尹成帶你實戰GO案例(27)Go 讀取檔案

尹成發表於2018-05-22
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")
// 從這個檔案中讀取一些位元組,並且由於位元組陣列長度所限,
// 最多讀取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))
// 沒有內建的rewind方法,但是可以使用`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))
// 最後關閉開啟的檔案。一般來講這個方法會在開啟檔案的時候,
// 使用defer來延遲關閉
f.Close()
}


在執行程式之前,你需要建立一個 /tmp/dat 檔案,然後寫入一些測試資料。
執行結果
hello world
i am jemy
who are you
what do you like
5 bytes: hello
2 bytes @ 6: wo
2 bytes @ 6: wo

5 bytes: hello





網址:http://www.qukuailianxueyuan.io/



欲領取造幣技術與全套虛擬機器資料

區塊鏈技術交流QQ群:756146052  備註:CSDN

尹成學院微信:備註:CSDN



網址:http://www.qukuailianxueyuan.io/



欲領取造幣技術與全套虛擬機器資料

區塊鏈技術交流QQ群:756146052  備註:CSDN

尹成學院微信:備註:CSDN

相關文章