8.1.Reader

(1)输入流

  • 流是应用程序和外部资源进行数据交互的纽带
  • 流分为输入流和输出流,输入和输出都是相对于程序,把外部数据传入程序中叫做输入流,反之叫做输出流
  • 在Go语言标准库中io包下是Reader接口表示输入流,只要实现这个接口就属于输入流

(2)手动创建流

  1. //Learn_Go/main.go
  2. package main
  3.  
  4. import (
  5. "fmt"
  6. "strings"
  7. )
  8.  
  9. func main() {
  10. r := strings.NewReader("hello world")
  11. b := make([]byte,r.Size())
  12. n,err := r.Read(b)
  13. if err != nil{
  14. fmt.Println("读取流数据失败",err)
  15. return
  16. }
  17. fmt.Println("读取的数据长度为:",n) //读取的数据长度为: 11
  18. fmt.Println("数据内容为:",string(b)) //数据内容为: hello world
  19. }

(3)读取文件内容

  1. //Learn_Go/main.go
  2. package main
  3.  
  4. import (
  5. "fmt"
  6. "os"
  7. )
  8.  
  9. func main() {
  10. f,_ := os.Open("D:/test.txt")
  11. fileInfo,_ := f.Stat()
  12. b := make([]byte,fileInfo.Size())
  13. f.Read(b)
  14. fmt.Println(string(b))
  15. }
  16.  
  17. //结果
  18. 床前明月光,
  19. 疑是地上霜。
  20. 举头望明月,
  21. 低头思故乡。

8.2.Writer

  1. //Learn_Go/main.go
  2. package main
  3.  
  4. import "os"
  5.  
  6. func main() {
  7. filePath := "D:/go.txt"
  8. f,err := os.OpenFile(filePath,os.O_APPEND,0660) // 0660 表示权限
  9. defer f.Close()
  10. if err != nil{
  11. f,_ = os.Create(filePath) //如果文件不存在,就新建一个文件
  12. }
  13. //f.Write([]byte("你好,世界"))
  14. f.WriteString("床前明月光,\r\n疑是地上霜。\r\n举头望明月,\r\n低头思故乡。")
  15. }

8.3.ioutil  

 ioutil包下提供了对文件读写的工具函数,通过这些函数快速实现文件的读写操作

(1)打开文件后使用ReadAll把文件内容读出来

  1. //Learn_Go/main.go
  2. package main
  3.  
  4. import (
  5. "fmt"
  6. "io/ioutil"
  7. "os"
  8. )
  9.  
  10. func main() {
  11. f,err := os.Open("D:/go.txt")
  12. defer f.Close()
  13. if err != nil{
  14. fmt.Println(err)
  15. return
  16. }
  17. b,err := ioutil.ReadAll(f)
  18. if err != nil{
  19. fmt.Println(err)
  20. return
  21. }
  22. fmt.Println(string(b))
  23. } 

 (2)可以直接读取文件中内容 

  1. //Learn_Go/main.go
  2. package main
  3.  
  4. import (
  5. "fmt"
  6. "io/ioutil"
  7. )
  8.  
  9. func main() {
  10. b,err := ioutil.ReadFile("D:/go.txt")
  11. if err != nil{
  12. fmt.Println(err)
  13. return
  14. }
  15. fmt.Println(string(b))
  16. }

(3)写数据

  1. //Learn_Go/main.go
  2. package main
  3.  
  4. import "io/ioutil"
  5.  
  6. func main() {
  7. //每次清空再写,而不是追加
  8. ioutil.WriteFile("D:/go.txt",[]byte("你好,世界"),0666)
  9. }

(4)读取所有目录

  1. //Learn_Go/main.go
  2. package main
  3.  
  4. import (
  5. "fmt"
  6. "io/ioutil"
  7. )
  8.  
  9. func main() {
  10. fi,_ := ioutil.ReadDir("D:/")
  11. for _,n := range fi{
  12. fmt.Println(n.Name()) //D盘下所有目录的名字
  13. }
  14. }

 

8.Go-Reader,Writer和ioutil的更多相关文章

  1. RFID 读写器 Reader Writer Cloner

    RFID读写器的工作原理 RFID的数据采集以读写器为主导,RFID读写器是一种通过无线通信,实现对标签识别和内存数据的读出和写入操作的装置. 读写器又称为阅读器或读头(Reader).查询器(Int ...

  2. Stream,Reader/Writer,Buffered的区别(1)

    Stream: 是字节流形式,exe文件,图片,视频等.支持8位的字符,用于 ASCII 字符和二进制数据. Reader/Writer: 是字符流,文本文件,XML,txt等,用于16位字符,也就是 ...

  3. RFIDler - An open source Software Defined RFID Reader/Writer/Emulator

    https://www.kickstarter.com/projects/1708444109/rfidler-a-software-defined-rfid-reader-writer-emul h ...

  4. RubyMine生成reader/writer方法

    RubyMine生成reader/writer方法 在非类的ruby文件中,Alt+Insert会出现新建文件的选项: 在ruby文件的类中,Alt+Insert会出现get/set方法生成提示和重构 ...

  5. multithreading - Reader/Writer Locks in C++

    You Only Need To Note This: only 1 single thread can acquire an upgrade_lock at one time. others are ...

  6. Stream,Reader/Writer,Buffered的区别(2)

    Reader: Reader的子类: 1.BufferedReader: FileReader 没有提供读取文本行的功能,BufferedReader能够指定缓冲区大小,包装了read方法高效读取字符 ...

  7. ExtJS4.2学习(7)——基础知识之Reader&Writer篇

    Reader: 主要用于将proxy数据代理读取的数据按照不同的规则进行解析,将解析好的数据保存到Modle中. 结构图 Ext.data.reader.Reader 读取器的根类(很少直接实例化这个 ...

  8. 02_IO操作的基本规律(InputStream,OutputStream,Reader,Writer,FileReader,FileWriter,BufferedReader,BufferedWri

     模拟BufferedInputStream,编写一个类 package toto.IO; import java.io.IOException; import java.io.InputStre ...

  9. Python CSV Reader/Writer 例子--转载

    CSV(comma-separated values) 是跨多种形式导入导出数据的标准格式,比如 MySQL.Excel. 它以纯文本存储数和文本.文件的每一行就代表一条数据,每条记录包含了由逗号分隔 ...

随机推荐

  1. luoguP3649 [APIO2014]回文串

    题意 关于回文自动机的讲解见这里 由于回文串个数是\(O(n)\)的,直接回文自动机上统计并比较即可. code: #include<bits/stdc++.h> using namesp ...

  2. AtCoder Grand Contest 040

    Preface 今年准备省选啥都不说了,省选题基本上都做过一遍了,开始尝试板刷AGC 这场做完就从AGC001开始吧,感觉以我的速度和来机房的频率一个礼拜做一场都谢天谢地了 A - >< ...

  3. Codechef November Challenge 2019 Division 1

    Preface 这场CC好难的说,后面的都不会做QAQ 还因为不会三进制位运算卷积被曲明姐姐欺负了,我真是太菜了QAQ PS:最后还是狗上了六星的说,期待两(三)场之内可以上七星 Physical E ...

  4. navicat连接mysql报错1251解决方案,从头搭建node + mysql 8.0 (本人亲测有效)

    准备学node 好久了 一直没有动手去写,今天突发奇想,然后就安装了一个mysql (找了一个博客跟着步骤去安装的),然后打算用node 写个增删改查. 1.下载mysql安装包   地址: http ...

  5. .NET 时间轴:从出生到巨人

    自1995年互联网战略日以来最雄心勃勃的事业 —— 微软.NET战略, 2000年6月30日. 微软于2000年推出基于Windows操作系统的应用软件开发框架.NET,发展至今形成巨大的技术栈,涉及 ...

  6. css 修改placeholder字体颜色字体大小 修改input记住账号密码后的默认背景色

     壹 ❀ 引 本来这个阶段的项目页面都是给实习生妹子做的,我只用写写功能接接数据,但这两天妹子要忙翻译,这个工作阶段也快结束了导致有点慌,只能自己把剩余的几个小页面给写了. 那么做页面的过程中,UI也 ...

  7. 【转】Ubuntu 16 安装 python 依赖出现 error: command 'i686-linux-gnu-gcc' failed with exit status 1

    问题 在 Ubuntu 下安装 python 依赖的时候出现以下错误 build/temp.linux-i686-3.5/_openssl.c:498:30: fatal error: openssl ...

  8. 详解JAVA8函数式接口{全}

    1: 函数式接口 1.1 概念 1.2 格式 1.3@FunctionalInterface注解 1.4 调用自定义函数接口 2:函数式编程 2.1:lambda的延迟执行 2.2 使用Lambda作 ...

  9. spring-boot-starter-web排除自带的logback依赖

    <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring- ...

  10. PI对于两个SAP客户端通道的了解

    你把你的报文放到ESR的MM里面试一下就知道了 日期格式之类的,可能有转换的你要输入2019-05-13这种 OA到PI不选,都是到一个系统,由PI再来分流 如果你要做成由OA来选的,就要参考类似于  ...