golang读取文件

/*
   go读取文件
   读写文件是很多程序的基本任务
*/

package main

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

/*
   读取文件的函数调用大多需要检查错误
   使用下面这个错误检查方法可以方便点
*/

func check(e error) {
    if e != nil {
        panic(e)
    }
}

/*
   知识点:
      ioutil.ReadFile 读取整个文件内容到内存
      make([]byte, 5)
      os.Open()
      f.Read()
      string(b1)

*/
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 %s\n", n2, 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 %s", n3, 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("%s", string(b4))

    /*
       最后关闭文件
       一版来讲 这个方法会在打开文件的时候
       使用defer 来延迟关闭
    */
    f.Close()
}

/*
   评论: 1.原始读写
          2.ioutil读写
          3.bufio读写
*/
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值