• go语言之进阶篇借助bufio实现按行读取内容


    1、借助bufio实现按行读取内容

    示例:

    package main
    
    import (
    	"bufio"
    	"fmt"
    	"io"
    	"os"
    )
    
    func WriteFile(path string) {
    	//打开文件,新建文件
    	f, err := os.Create(path)
    	if err != nil {
    		fmt.Println("err = ", err)
    		return
    	}
    
    	//使用完毕,需要关闭文件
    	defer f.Close()
    
    	var buf string
    
    	for i := 0; i < 10; i++ {
    		//"i = 1
    ", 这个字符串存储在buf中
    		buf = fmt.Sprintf("i = %d
    ", i)
    		//fmt.Println("buf = ", buf)
    
    		n, err := f.WriteString(buf)
    		if err != nil {
    			fmt.Println("err = ", err)
    		}
    		fmt.Println("n = ", n)
    	}
    }
    
    func ReadFile(path string) {
    	//打开文件
    	f, err := os.Open(path)
    	if err != nil {
    		fmt.Println("err = ", err)
    		return
    	}
    
    	//关闭文件
    	defer f.Close()
    
    	buf := make([]byte, 1024*2) //2k大小
    
    	//n代表从文件读取内容的长度
    	n, err1 := f.Read(buf)
    	if err1 != nil && err1 != io.EOF { //文件出错,同时没有到结尾
    		fmt.Println("err1 = ", err1)
    		return
    	}
    
    	fmt.Println("buf = ", string(buf[:n]))
    
    }
    
    //每次读取一行
    func ReadFileLine(path string) {
    	//打开文件
    	f, err := os.Open(path)
    	if err != nil {
    		fmt.Println("err = ", err)
    		return
    	}
    
    	//关闭文件
    	defer f.Close()
    
    	//新建一个缓冲区,把内容先放在缓冲区
    	r := bufio.NewReader(f)
    
    	for {
    		//遇到'
    '结束读取, 但是'
    '也读取进入
    		buf, err := r.ReadBytes('
    ')
    		if err != nil {
    			if err == io.EOF { //文件已经结束
    				break
    			}
    			fmt.Println("err = ", err)
    		}
    
    		fmt.Printf("buf = #%s#
    ", string(buf))
    	}
    
    }
    
    func main() {
    	path := "./demo.txt"
    
    	//WriteFile(path)
    	//ReadFile(path)
    	ReadFileLine(path)
    }
    

    执行结果:

    err1 =  i = 0
    
    i = 1
    i = 2
    i = 3
    i = 4
    i = 5
    i = 6
    i = 7
    i = 8
    i = 9
    

      

  • 相关阅读:
    Div高度百分比
    字典树模板题 POJ 2503
    POJ 2828
    POJ 2186
    HDU 3397 双lazy标记的问题
    HDU 3911 区间合并求最大长度的问题
    CodeForces 444C 节点更新求变化值的和
    POJ 3667 线段树的区间合并简单问题
    HDU 4578 线段树复杂题
    UVAlive 3211 Now or Later
  • 原文地址:https://www.cnblogs.com/nulige/p/10268061.html
Copyright © 2020-2023  润新知