bufio

  • bufio包实现了带缓冲区的读写,是对文件读写的封装
  • bufio缓冲写数据
模式 含义
os.O_WRONLY 只写
os.O_CREATE 创建文件
os.O_RDONLY 只读
os.O_RDWR 读写
os.O_TRUNC 清空
os.O_APPEND 追加
  • bufio读、写数据
  1. func main() {
  2. //wr()
  3. re()
  4. }
  5. func re() {
  6. // 读文件用os.Open
  7. file, err := os.Open("./t01.txt")
  8. if err != nil {
  9. fmt.Println(err.Error())
  10. return
  11. }
  12. defer file.Close()
  13. // 获取reader对象
  14. reader := bufio.NewReader(file)
  15. for {
  16. line, _, err := reader.ReadLine()
  17. if err == io.EOF {
  18. break
  19. }
  20. if err != nil {
  21. fmt.Println(err.Error())
  22. return
  23. }
  24. fmt.Println(string(line))
  25. }
  26. }
  27. func wr() {
  28. // 写文件用os.OpenFile
  29. file, err := os.OpenFile("t01.txt", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
  30. if err != nil {
  31. fmt.Println(err.Error())
  32. return
  33. }
  34. defer file.Close()
  35. // 获取Writer对象
  36. writer := bufio.NewWriter(file)
  37. for i := 0; i < 10; i++ {
  38. writer.WriteString(fmt.Sprintf("hello %d\n", i))
  39. }
  40. // 刷新缓冲区,强制写出
  41. writer.Flush()
  42. }

ioutil工具包

  • 工具包写文件
  • 工具包读取文件
  1. func main() {
  2. //wr()
  3. re()
  4. }
  5. func wr() {
  6. if err := ioutil.WriteFile("./t02.txt", []byte("哈哈哈哈\n"), 0644); err != nil {
  7. fmt.Println(err.Error())
  8. return
  9. }
  10. }
  11. func re() {
  12. data, err := ioutil.ReadFile("./t02.txt")
  13. if err != nil {
  14. fmt.Println(err.Error())
  15. return
  16. }
  17. fmt.Println(string(data))
  18. }

例子:实现一个Cat命令

使用文件操作相关知识,模拟实现linux平台cat命令的功能。

  1. func main() {
  2. flag.Parse() // 解析命令行参数
  3. if flag.NArg() == 0 {
  4. // 如果没有参数,默认从标准输入读取内容
  5. reader := bufio.NewReader(os.Stdin)
  6. cat(reader)
  7. }
  8. // 依次读取每个指定文件的内容,并打印到终端
  9. for i := 0; i < flag.NArg(); i++ {
  10. file, err := os.Open(flag.Arg(i))
  11. if err != nil {
  12. fmt.Fprintf(os.Stdout, "reading from %s failed, err: %v \n", flag.Arg(i), err)
  13. continue
  14. }
  15. cat(bufio.NewReader(file))
  16. }
  17. }
  18. // cat 命令实现
  19. func cat (r *bufio.Reader) {
  20. for {
  21. buf, err := r.ReadBytes('\n') // 注意是字符
  22. if err == io.EOF {
  23. break
  24. }
  25. fmt.Fprintf(os.Stdout, "%s", buf)
  26. }
  27. }

golang中bufio和ioutil的使用的更多相关文章

  1. Go_18: Golang 中三种读取文件发放性能对比

    Golang 中读取文件大概有三种方法,分别为: 1. 通过原生态 io 包中的 read 方法进行读取 2. 通过 io/ioutil 包提供的 read 方法进行读取 3. 通过 bufio 包提 ...

  2. Golang 中三种读取文件发放性能对比

    Golang 中读取文件大概有三种方法,分别为: 1. 通过原生态 io 包中的 read 方法进行读取 2. 通过 io/ioutil 包提供的 read 方法进行读取 3. 通过 bufio 包提 ...

  3. golang中Context的使用场景

    golang中Context的使用场景 context在Go1.7之后就进入标准库中了.它主要的用处如果用一句话来说,是在于控制goroutine的生命周期.当一个计算任务被goroutine承接了之 ...

  4. Golang中的自动伸缩和自防御设计

    Raygun服务由许多活动组件构成,每个组件用于特定的任务.其中一个模块是用Golang编写的,负责对iOS崩溃报告进行处理.简而言之,它接受本机iOS崩溃报告,查找相关的dSYM文件,并生成开发者可 ...

  5. golang中发送http请求的几种常见情况

    整理一下golang中各种http的发送方式 方式一 使用http.Newrequest 先生成http.client -> 再生成 http.request -> 之后提交请求:clie ...

  6. Golang中GBK和UTF8编码格式互转

    Golang中GBK和UTF8编码格式互转 需求 已知byte数组的编码格式转换 实现代码 package utils import ( "bytes" "golang. ...

  7. Golang中常用的代码优化点

    Golang中常用的代码优化点 大家好,我是轩脉刃. 这篇想和大家聊一聊golang的常用代码写法.在golang中,如果大家不断在一线写代码,一定多多少少会有一些些代码的套路和经验.这些经验是代表你 ...

  8. 优雅处理Golang中的异常

    我们在使用Golang时,不可避免会遇到异常情况的处理,与Java.Python等语言不同的是,Go中并没有try...catch...这样的语句块,我们知道在Java中使用try...catch.. ...

  9. golang中的race检测

    golang中的race检测 由于golang中的go是非常方便的,加上函数又非常容易隐藏go. 所以很多时候,当我们写出一个程序的时候,我们并不知道这个程序在并发情况下会不会出现什么问题. 所以在本 ...

随机推荐

  1. IDEA结合mybatis插件自动生成代码

    pom文件 添加插件 <plugin> <groupId>org.mybatis.generator</groupId> <artifactId>myb ...

  2. nim_duilib(9)之RichEdit

    introduction 更多控件用法,请参考 here 和 源码. 本文的代码基于这里 RichEdit的更多用法,请参考源码中RichEdit.h提供的函数,RichEdit控件,可以定制为多种多 ...

  3. 【LeetCode】140. Word Break II 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 递归求解 日期 题目地址:https://leetc ...

  4. 【LeetCode】623. Add One Row to Tree 解题报告(Python)

    [LeetCode]623. Add One Row to Tree 解题报告(Python) 标签(空格分隔): LeetCode 题目地址:https://leetcode.com/problem ...

  5. Codeforces 777C:Alyona and Spreadsheet(预处理)

    During the lesson small girl Alyona works with one famous spreadsheet computer program and learns ho ...

  6. SROP

    先放个例题吧,原理后面有时间再更:BUUCTF ciscn_2019_s_3 保护只开了nx 1 signed __int64 vuln() 2 { 3 signed __int64 v0; // r ...

  7. 编写Java程序,使用 dom4j 创建一个 XML 文档,文档名为“city.xml”。注意该文档的格式和数据

    查看本章节 查看作业目录 需求说明: 使用 dom4j 创建一个 XML 文档,文档名为"city.xml".该文档的格式和数据如图所示 实现思路: 创建Java项目,添加dom4 ...

  8. 编写Java程序,实现对兵营类的封装,将兵营类中的所有属性设置为私有访问权限,方法设置为公有访问权限

    返回本章节 返回作业目录 需求说明: 实现对兵营类的封装 将兵营类中的所有属性设置为私有访问权限. 将兵营类中所有属性的赋值方法设置为公有访问权限. 要求兵营名称的长度在4-8位之间. 要求兵营士兵的 ...

  9. 编写Java程序,实现简单的五子棋博弈游戏(美和易思Java练习习题)

    package com.qq.gb; import java.util.Scanner; public class GoBang { Scanner sc = new Scanner(System.i ...

  10. frontend-maven-plugin插件问题解决

    1.插件介绍 frontend-maven-plugin为项目本地下载/安装Node和NPM,运行npm install命令 . 它适用于Windows,OS X和Linux. 这个插件也可以下载No ...