zoukankan      html  css  js  c++  java
  • 8.Go-Reader,Writer和ioutil

    8.1.Reader

    (1)输入流

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

    (2)手动创建流

    //Learn_Go/main.go
    package main
    
    import (
    	"fmt"
    	"strings"
    )
    
    func main() {
    	r := strings.NewReader("hello world")
    	b := make([]byte,r.Size())
    	n,err := r.Read(b)
    	if err != nil{
    		fmt.Println("读取流数据失败",err)
    		return
    	}
    	fmt.Println("读取的数据长度为:",n)       //读取的数据长度为: 11
    	fmt.Println("数据内容为:",string(b))     //数据内容为: hello world
    }
    

    (3)读取文件内容

    //Learn_Go/main.go
    package main
    
    import (
    	"fmt"
    	"os"
    )
    
    func main() {
    	f,_ := os.Open("D:/test.txt")
    	fileInfo,_ := f.Stat()
    	b := make([]byte,fileInfo.Size())
    	f.Read(b)
    	fmt.Println(string(b))
    }
    
    //结果
    床前明月光,
    疑是地上霜。
    举头望明月,
    低头思故乡。
    

    8.2.Writer

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

    8.3.ioutil  

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

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

    //Learn_Go/main.go
    package main
    
    import (
    "fmt"
    "io/ioutil"
    "os"
    )
    
    func main() {
    	f,err := os.Open("D:/go.txt")
    	defer f.Close()
    	if err != nil{
    		fmt.Println(err)
    		return
    	}
    	b,err := ioutil.ReadAll(f)
    	if err != nil{
    		fmt.Println(err)
    		return
    	}
    	fmt.Println(string(b))
    } 

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

    //Learn_Go/main.go
    package main
    
    import (
    	"fmt"
    	"io/ioutil"
    )
    
    func main() {
    	b,err := ioutil.ReadFile("D:/go.txt")
    	if err != nil{
    		fmt.Println(err)
    		return
    	}
    	fmt.Println(string(b))
    }
    

    (3)写数据

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

    (4)读取所有目录

    //Learn_Go/main.go
    package main
    
    import (
    	"fmt"
    	"io/ioutil"
    )
    
    func main() {
    	fi,_ := ioutil.ReadDir("D:/")
    	for _,n := range fi{
    		fmt.Println(n.Name())     //D盘下所有目录的名字
    	}
    }
    
  • 相关阅读:
    大数加法、乘法实现的简单版本
    hdu 4027 Can you answer these queries?
    zoj 1610 Count the Colors
    2018 徐州赛区网赛 G. Trace
    1495 中国好区间 尺取法
    LA 3938 动态最大连续区间 线段树
    51nod 1275 连续子段的差异
    caioj 1172 poj 2823 单调队列过渡题
    数据结构和算法题
    一个通用分页类
  • 原文地址:https://www.cnblogs.com/gaidy/p/11887160.html
Copyright © 2011-2022 走看看