Golang程序 逐行读取文件的内容

Golang程序 逐行读取文件的内容

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

方法1:使用bufio和os包

在这个插图中,bufio.NewScanner被用来逐行读取内容,os.Open被用来打开文件。只要有一行要读,有一个扫描器,扫描方法就会返回真。当前读取的行由文本返回。当该函数返回时,文件将使用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()在控制台打印错误。

例子

在这个例子中,我们将使用scanner逐行读取一个文件的内容。

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和字符串包

该实例使用ioutil.ReadFile函数将文件的内容以[]字节的形式读入内存。然后使用字符串函数和字符串将内容变成一个字符串。使用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包。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程