gobyexample-reading-files

来源:https://github.com/xg-wang/gobyexample/tree/master/examples


package main

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

//读取文件需要经常进行错误检查,这个帮助方法可以精简下面的错误的检测过程
func check(e error) {
   if e != nil {
       panic(e)
   }
}

func main() {
   //大部分的基本的文件读取任务是将文件内容读取得到内存中
   dat, err := ioutil.ReadFile("D:/goworkspace/src/gobyexample/reading-files/dat.txt")
   check(err)
   fmt.Println(string(dat))

   //对一个文件是怎么读取并且读取到哪一部分进行更多的控制。对于这个任务,从 使用`os.Open`
   //打开一个文件获取一个`os.File`值开始
   f, err := os.Open("D:/goworkspace/src/gobyexample/reading-files/dat.txt")
   check(err)

   //从文件开始位置读取一些字节,这里最多读取5个字节,并且这也是我们实际读取的字节数
   b1 := make([]byte, 5)
   n1, err := f.Read(b1)
   check(err)
   fmt.Printf("%d bytes: %s\n", n1, string(b1))

   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))

   _, 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))

   f.Close()
}


你可能感兴趣的:(gobyexample-reading-files)