• GO 文件读取常用的方法


    GO 文件读取常用的方法

    方式1: 一行一行的方式读取

    其中常用的方法就有:ReadString,ReadLine,ReadBytes

    ReadLine 返回单个行,不包括行尾字节,就是说,返回的内容不包括\n或者\r\n,返回的类型为[]byte
    ReadString('\n') 以分隔字符方式读取,遇到传入的分割字符时就返回结果,返回的结果包含分隔字符本身,返回的类型为string,比如传入\n,代码遇到\n字符就返回,而文件行尾都是以\n结尾,所以ReadString('\n')就实现了分行读取
    ReadBytes('\n') 和ReadString方法差不多,只是结果以[]byte类型返回数据
    文件读取需要注意点:

    记得处理完后关闭文件,以防止内存泄露,占用操作系统文件句柄数
    文件读取结束后返回的err类型是io.EOF,可以使用这个来跳出循环
    方式一源码例子:

    package main
     
    import (
    	"bufio"
    	"fmt"
    	"io"
    	"os"
    )
     
    func main() {
    	// 读取一个文件的内容
    	file, err := os.Open("./abc.txt")
    	if err != nil {
    		fmt.Println("open file err:", err.Error())
    		return
    	}
     
    	// 处理结束后关闭文件
    	defer file.Close()
     
    	// 使用bufio读取
    	r := bufio.NewReader(file)
     
    	for {
    		// 分行读取文件  ReadLine返回单个行,不包括行尾字节(\n  或 \r\n)
    		//data, _, err := r.ReadLine()
     
    		// 以分隔符形式读取,比如此处设置的分割符是\n,则遇到\n就返回,且包括\n本身 直接返回字符串
    		data, err := r.ReadString('\n')
    
                    // 打印出内容
    		fmt.Printf("%v", string(data))
    		fmt.Println("-------------------------")
     
    		// 以分隔符形式读取,比如此处设置的分割符是\n,则遇到\n就返回,且包括\n本身 直接返回字节数数组
    		// data, err := r.ReadBytes('\n')
                    
                   
    
    		// 读取到末尾退出
    		if err == io.EOF {
    			break
    		}
     
    		if err != nil {
    			fmt.Println("read err", err.Error())
    			break
    		}
     
    		// 打印出内容
    		fmt.Printf("%v", string(data))
    	}
    }
    

    方式2: 一次性读取

    一次性读取适合读取内容比较小的文件,大文件读取建议使用第一种方式

    一次性读取可以使用ioutil.ReadFile方法,次方法不需要关闭文件,源码例子如下:

    package main
     
    import (
    	"fmt"
    	"io/ioutil"
    )
     
    func main() {
    	// 使用ioutil一次性读取文件
    	data, err := ioutil.ReadFile("./abc.txt")
    	if err != nil {
    		fmt.Println("read file err:", err.Error())
    		return
    	}
     
    	// 打印文件内容
    	fmt.Println(string(data))
    }
    

    原文链接:https://blog.csdn.net/weixin_39015119/article/details/103533432

  • 相关阅读:
    诸侯安置
    可可西里
    直线交点
    切割多边形
    ACM挑战程序设计竞赛1.1抽签
    朝鲜战争:轰炸大小和岛
    星际争霸II 战斗问题
    乒乓球
    瑞士轮
    NOIP 2010 普及组解题报告
  • 原文地址:https://www.cnblogs.com/hsyw/p/16124412.html
Copyright © 2020-2023  润新知