go语言基础 文件读取Read os包

os.Open()-->返回值*File,err  ***** 打开后可以

File.Read([]byte)-->count,err,读取数据,读取完毕err会显示EOF,来证明整个文件读取完毕,

打开文件后不要忘记关闭哈

可以利用defer,延迟 最后关闭

derer File.close 关闭文件

package main

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

func main()  {
   file,err:= os.Open("C:\\liu\\pro\\aa.txt")
   if err!=nil{
      fmt.Println("文件打开失败。。")
      return
   }
   defer file.Close()
   //读取数据
   bs := make([] byte,4)
   count := 0//每次读取的数量
   for {
      count, err = file.Read(bs)
      if err ==io.EOF{
         fmt.Println()
         fmt.Println("数据读取完毕。。")
         break
      }
      fmt.Print(string(bs[:count]))
   }


   /*
   //第一次读取,通过file读取对应的文件,将数据读入到bs中,返回值是本次实际读入的数量
   count ,err = file.Read(bs)
   fmt.Println(err) //
   fmt.Println(count) //4
   fmt.Println(bs) //[97 98 99 100]
   fmt.Println(string(bs)) //abcd

   //第二次读取
   count,err = file.Read(bs)
   fmt.Println(err) //
   fmt.Println(count) //4
   fmt.Println(bs) //[101 102 103 104]
   fmt.Println(string(bs)) //efgh

   //第三次读,读取2个
   count,err = file.Read(bs)
   fmt.Println(err) //
   fmt.Println(count) //2
   fmt.Println(bs) //[101 102 103 104]
   //fmt.Println(string(bs)) //efgh  ijgh
   fmt.Println(string(bs[:count])) //ij
   //第四次读取,读取到文件末尾时,返回error为io.EOF,,而且count的值为0
   count, err= file.Read(bs)
   fmt.Println(err) //EOF
   fmt.Println(count) //0
   
}

File.ReadAt([] byte, off)-->coutn,err,从指定off位置读取

package main

import (
   "os"
   "fmt"
)

func main()  {
   /*
   Read([]bs),默认从头开始读取
      光标在最后,再次读取,返回error为io.EOF
   ReadAt([] bs, offset int),从指定位置开始读取
    */
    file,_:=os.Open("C:\\liu\\pro\\aa.txt")
    bs := make([] byte ,4)
    /*
    1.ReadAt(bs, 0)-->4
    2.ReadAt(bs,4)-->4
    3.ReadAt(bs,8)-->2    EOF
     */
    count, err:=file.ReadAt(bs,2)
    fmt.Println(err) //
    fmt.Println(count) //4
    fmt.Println(string(bs[0:count]))

    count, err = file.ReadAt(bs,7)
    fmt.Println(err) //EOF
    fmt.Println(count) //3
    fmt.Println(string(bs[:count]))
}

你可能感兴趣的:(包)