zoukankan      html  css  js  c++  java
  • Go_io操作

    I/O操作也叫输入输出操作。其中I是指Input,O是指Output,用于读或者写数据的,有些语言中也叫流操作,是指数据通信的通道。

    Golang 标准库对 IO 的抽象非常精巧,各个组件可以随意组合,可以作为接口设计的典范。

    1. 读取数据

    package main
    
    import (
    	"os"
    	"fmt"
    	"io"
    )
    
    func main() {
    	/*
    	读取数据:
    		Reader接口:
    			//方法
    			Read(p []byte)(n int, error) //n是读到的字节数
    	 */
    	//读取本地aa.txt文件中的数据
    	//step1:打开文件
    	fileName := "/Users/ruby/Documents/pro/a/aa.txt" //内容 abcdefghij
    	file, err := os.Open(fileName)
    	if err != nil {
    		fmt.Println("err:", err)
    		return
    	}
    	//step3:关闭文件
    	defer file.Close()
    
    	//step2:读取数据
    	bs := make([]byte, 4, 4) //实际中是1024或者1024*2/*4
    
    	//第一次读取
    	n, err := file.Read(bs) //向切片中存储数据
    	fmt.Println(err)        //<nil>
    	fmt.Println(n)          //4
    	fmt.Println(bs)         //[97 98 99 100]
    	fmt.Println(string(bs)) //abcd
    
    	//第二次读取
    	n, err = file.Read(bs)
    	fmt.Println(err)        //<nil>
    	fmt.Println(n)          //4
    	fmt.Println(bs)         //[101 102 103 104]
    	fmt.Println(string(bs)) //efgh
    
    	//第三次读取
    	n, err = file.Read(bs)
    	fmt.Println(err)        //<nil>
    	fmt.Println(n)          //2
    	fmt.Println(bs)         //[105 106 103 104]
    	fmt.Println(string(bs)) //ijgh
    
    	//第四次读取
    	n, err = file.Read(bs)
    	fmt.Println(err) //EOF
    	fmt.Println(n)   //0
    
    	n := -1
    	for {
    		n, err = file.Read(bs)
    		if n == 0 || err == io.EOF {
    			fmt.Println("读取到了文件的末尾,结束读取操作。。")
    			break
    		}
    		fmt.Println(string(bs[:n]))
    	}
    }
    

    2. 写出数据

    package main
    
    import (
    	"os"
    	"fmt"
    	"log"
    )
    
    func main() {
    	/*
    	写出数据:
    	 */
    
    	fileName := "/Users/ruby/Documents/pro/a/ab.txt"
    	//step1:打开文件
    	//step2:写出数据
    	//step3:关闭文件
    	//file,err := os.Open(fileName)
    	
    	//os.O_CREATE 不存在就创建
    	//os.O_WRONLY 每次都会覆盖掉原有的内容
    	//os.O_APPEND 每次向问文件的末尾开始写
    	file,err := os.OpenFile(fileName,os.O_CREATE|os.O_WRONLY|os.O_APPEND,os.ModePerm)
    	if err != nil{
    		fmt.Println(err)
    		return
    	}
    	defer file.Close()
    
    	//写出数据
    	//bs :=[]byte{65,66,67,68,69,70}//A,B,C,D,E,F
    	bs :=[] byte{97,98,99,100} //a,b,c,d
    	//n,err := file.Write(bs)
    	n,err := file.Write(bs[:2]) //n是写出多少字节(整数)
    	fmt.Println(n)
    	HandleErr(err)
    	file.WriteString("
    ")
    
    	//直接写出字符串
    	n,err = file.WriteString("HelloWorld")
    	fmt.Println(n)
    	HandleErr(err)
    
    	file.WriteString("
    ")
    	n,err =file.Write([]byte("today")) //转成切片(字节类型)
    	fmt.Println(n)
    	HandleErr(err)
    
    }
    
    //处理错误的函数
    func HandleErr(err error){
    	if err != nil{
    		log.Fatal(err)
    	}
    }
    

     

  • 相关阅读:
    (转)使用 sys 帳號登入 E900 Standalone 安裝的 Oracle 資料庫
    Eclipse中main函数由控制台输入参数为空的处理
    orcle10Concepts笔记
    根据某个时间字符串获取上个月的时间
    eclipse导入java项目方法及出现问题
    好用的网址
    收藏网址
    Eclipse中main函数由控制台输入参数并接收
    java.io读写文本
    ClassNotFoundException处理
  • 原文地址:https://www.cnblogs.com/yzg-14/p/12251015.html
Copyright © 2011-2022 走看看