Golang 逐行读取文件内容

Golang 逐行读取文件内容

在Golang中,有各种内部包,如bufio、os和io,可用于逐行读取文件内容。bufio和os包用于使用os.open和bufio.NewScanner函数打开和扫描文件。我们将使用io包的ioutil.ReadFile函数从给定的目标中读取文件,并使用string函数将其显示在输出中。

方法1:使用bufio和os包

在此说明中,我们使用bufio.NewScanner按行读取内容,并使用os.Open打开文件。只要还有一行可读且有扫描器,扫描方法就会返回true。text变量返回当前读取的行。函数返回时,将使用defer语句关闭文件。

语法

os.Open

这个函数是os包的一部分。它用来打开一个文件进行读取。它接受一个输入,即要打开的文件名。

bufio.NewScanner

该函数是bufio包的一部分。它用于创建一个扫描器对象,用于从文件中读取数据。

步骤

  • 第1步 - 在程序中创建main包,并声明fmt(格式化包)、bufio和os包。其中main产生可执行代码,fmt用于格式化输入和输出。

  • 第2步 - 创建一个main函数,并在该函数中使用os包的os.Open函数打开要读取内容的文件。

  • 第3步 - 如果在打开文件时出现错误,请将错误打印在控制台上并返回。

  • 第4步 - 使用defer关键字和close函数关闭打开的文件。

  • 第5步 - 使用文件作为参数,在bufio.NewScanner对象中创建一个对象,并通过迭代文件的行来逐行读取内容。

  • 第6步 - 迭代中使用的条件是只要文件中有一行存在就读取并打印,否则使用scanner.Scan()函数终止循环。

  • 第7步 - 但是,如果在扫描过程中出现错误,请使用fmt.Println()将错误打印在控制台上。

示例

在本示例中,我们将使用扫描器逐行读取文件的内容。

package main
import (
    "bufio"
    "fmt"
    "os"
)

func main() {
    myfile, err := os.Open("file1.txt")  //open the file
    if err != nil {
        fmt.Println("Error opening file:", err)
        return
    }
    defer myfile.Close()

    scanner := bufio.NewScanner(myfile)  //scan the contents of a file and print line by line
    for scanner.Scan() {
        line := scanner.Text()
        fmt.Println(line)
    }

    if err := scanner.Err(); err != nil {
        fmt.Println("Error reading from file:", err) //print error if scanning is not done properly
    }
}

输出

line 1
line 2
line 3

方法2:使用io/ioutil和strings包

此示例使用ioutil.ReadFile函数将文件内容读入内存,以[]bytes格式存储。然后使用字符串转换函数和strings包将内容转换为字符串。使用Split函数将字符串根据换行符分隔成多行。接下来,通过for循环迭代每一行,并打印出来。

语法

Ioutil.ReadFile

这个函数在ioutil包中可用,用于读取文件的内容,文件名作为函数的输入。

步骤

  • 步骤1 −在程序中创建一个主要的包main,并声明fmt(格式化包)、io/ioutil和strings包,其中main产生可执行代码,fmt用于格式化输入和输出。

  • 步骤2 −创建一个main函数,在该函数中使用ioutil.ReadFile函数读取文件file1.txt。

  • 步骤3 −如果在读取文件时出现错误,打印错误并返回。

  • 步骤4 −使用strings.Split函数使用\n拆分数据。

  • 步骤5 −迭代已拆分的字符串,逐行打印内容。

  • 步骤6 −使用fmt.Println()函数执行打印语句,其中ln表示新行。

示例

在这个示例中,我们将使用来自io包的ioutil.ReadFile函数。

package main
import (
   "fmt"
   "io/ioutil"
   "strings"
)

func main() {
   data, err := ioutil.ReadFile("file1.txt")  //read the file 
   if err != nil {
      fmt.Println("Error reading file:", err) //print the error if comes while reading file 
      return
   }
   read_lines := strings.Split(string(data), "\n")
   for _, line := range read_lines {
      fmt.Println(line) //print the content line by line
   }
}

输出

line 1
line 2
line 3

结论

我们使用两个示例执行了按行读取文件内容的程序。在第一个示例中使用了bufio和os包,在第二个示例中使用了io/ioutil包。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程