前言

文件 I/O,特别是对文件的读写是编程语言中重要的功能。通常,我们需要逐行读取文件。

GO 提供了 bufio 软件包,实现了有缓冲的 I/O。它包装一个 io.Readerio.Writer 接口对象,创建另一个也实现了该接口,且同时还提供了缓冲和一些文本 I/O 的帮助函数的对象。

在读取文件之前,我们首先需要使用 os.Open() 函数将其打开,该函数返回指向文件的指针类型。代码段中显示的 D:\\go_work\\test.txt 文件需要已经存在在系统中(将路径放置到文件所在的位置)。

bufio.NewScanner(file) 函数创建并返回一个从 r 读取数据的 Scanner 类型,该类型中的函数支持读取文件,其中默认的分割函数是 ScanLines

要逐行读取文件,我们需要使用两种在新的 Scanner 的方法 Scan,它会获取当前位置的 token(该 token 可以通过 Bytes 或 Text 方法获得,在本例中为新行),并让 Scanner 的扫描位置移动到下一个 token,和 Text(或 Byte)读取调用 Scan 时生成的最新符记。

如果在读取文件时遇到任何错误,可以通过在新的 Scanner 上调用 Err() 方法来处理这些错误,该方法将返回 Scanner 遇到的第一个非文件结尾错误;除非是 io.EOF,此时 Err 会返回 nil

Go 逐行读取文件的完整代码

package main

import (
"bufio"
"fmt"
"log"
"os"
) func main() {
// open the file
file, err := os.Open("D:\\go_work\\test.txt") // handle errors while opening
if err != nil {
log.Fatalf("Error when opening file: %s", err)
}
defer file.Close() fileScanner := bufio.NewScanner(file) // read line by line
for fileScanner.Scan() {
fmt.Println(fileScanner.Text())
}
// handle first encountered error while reading
if err := fileScanner.Err(); err != nil {
log.Fatalf("Error while reading file: %s", err)
}
}

配置 Scanner 行为

Scanner 类型具有 Split 函数,该函数接受 SplitFunc 函数来确定 Scanner 如何拆分给定的字节片。默认的 SplitFuncScanLines,它将返回文本的每一行,并删除行尾标记。

例如,我们可以使用单词进行拆分,如下面的代码片段所示:

scanner.Split(bufio.ScanWords)  //configure how the scanner behaves

go 逐行读取文件的更多相关文章

  1. android逐行读取文件内容以及保存为文件

    用于长时间使用的apk,并且有规律性的数据 1,逐行读取文件内容 //首先定义一个数据类型,用于保存读取文件的内容 class WeightRecord { String timestamp; flo ...

  2. python中逐行读取文件的最佳方式_Drupal_新浪博客

    python中逐行读取文件的最佳方式_Drupal_新浪博客 python中逐行读取文件的最佳方式    (2010-08-18 15:59:28)    转载▼    标签:    python   ...

  3. c#逐行读取文件到数组

    /// <summary> /// 逐行读取文件到泛型数组 /// </summary> /// <param name="FilePath"> ...

  4. shell逐行读取文件内容

    shell 中逐行读取文件内容 1.语法简介 #!/bin/bash <<EOF shell 中逐行读取文件内容的语法如下所示. 这里虽然很简单,但是再配合上其他的工具,如sed,awk, ...

  5. Shell逐行读取文件的3种方法

    方法1:while循环中执行效率最高,最常用的方法. while read linedoecho $linedone  < filename 注释:这种方式在结束的时候需要执行文件,就好像是执行 ...

  6. 有关fgetc配合feof逐行读取文件最后一行读取两遍的错觉?

    最近在做一个wifiap设置的接口,用户首先获取到当前wifi 热点的ssid 和pwd,然后修改,保存. 获取信息的时候是fopen对应的hostapd.conf文件,逐行读取,查找匹配的参数. 修 ...

  7. Linux shell逐行读取文件的方法

    方法1:while循环中执行效率最高,最常用的方法. function while_read_line_bottom(){ while read line do echo $line done < ...

  8. python 逐行读取文件的三种方法

    方法一: 复制代码代码如下: f = open("foo.txt")             # 返回一个文件对象  line = f.readline()             ...

  9. Python逐行读取文件内容

    更详细的文件按行读取操作可以参考:http://www.cnblogs.com/xuxn/archive/2011/07/27/read-a-file-with-python.html 一行一行得从文 ...

  10. golang 逐行读取文件

    package main import ( "bufio" "fmt" "io" "os" ) func main() ...

随机推荐

  1. Qt数据库应用8-数据导出组件示例说明

    一.前言 为了方便用户学习使用本组件,特意针对每个功能模块,每种可能的应用场景,都编写了对应的示例demo,从初级示例到中级示例再到高级示例以及多线程示例等,层层加码,针对结构体数据都做了相当详细细致 ...

  2. IM开发干货分享:万字长文,详解IM“消息“列表卡顿优化实践

    本文由融云技术团队原创分享,原题"万字干货:IM "消息"列表卡顿优化实践",为使文章更好理解,内容有修订. 1.引言 随着移动互联网的普及,无论是IM开发者还 ...

  3. 1011. 在 D 天内送达包裹的能力

    在 D 天内送达包裹的能力 传送带上的包裹必须在 days 天内从一个港口运送到另一个港口. 传送带上的第 i 个包裹的重量为 weights[i].每一天,我们都会按给出重量(weights)的顺序 ...

  4. Golang-函数5

    http://c.biancheng.net/golang/func/ Go语言函数(Go语言func) 函数构成了代码执行的逻辑结构,在Go语言中,函数的基本组成为:关键字 func.函数名.参数列 ...

  5. APSI - 0

    最近安装了APSI库,尝试了多种方法,现在总结一下! 先提下安装环境需求: 第三方依赖包: Mac vcpkg 使用vcpkg一键安装 1.先安装vcpkg (1)第一种方法 git clone gi ...

  6. ECharts中实现x轴中的坐标以不同间距显示的效果

    1.需求描述 我们日常在使用ECharts实现曲线图或柱状图的时候,x轴上的坐标都是等距离显示的. 有时候我们可能有这个需求: x轴上的坐标距离按照对应数据的比例进行显示. 打个比方,假设x轴上有5个 ...

  7. [记录点滴] 一个解决Lua 随机数生成问题的办法

    [记录点滴] 一个解决Lua 随机数生成问题的办法 0x00 摘要 本文是开发中的简略记录,具体涉及知识点有:Lua,随机数. 0x01 背景 Lua语言生成随机数需要用到两个函数: math.ran ...

  8. 流程控制之增强for循环

    语法 for (声明语句:表达式){    //代码语句} 实例: package com.yeyue.struct;​public class ForDemo05 {    public stati ...

  9. 访问控制模型 ABAC 的使用和设计原则

    访问控制(AC)的发展历程 访问控制(Access Control, AC)是保护系统资源的重要机制,决定"谁"可以访问"哪些"资源,并能执行"哪些操 ...

  10. C# 全角字符和半角字符相互转换

    参考链接:https://blog.csdn.net/willingtolove/article/details/106923879 1. 全角转半角 /// <summary> /// ...