Go 语言程序逐行读取文件内容
在 Go 语言中,有各种内部包,如 bufio、os 和 io,可用于逐行读取文件内容。bufio 和 os 包用于使用 os.open 和 bufio.NewScanner 函数打开和扫描文件。我们将使用 io 包中的 ioutil.ReadFile 函数来读取指定位置的文件,并使用字符串函数将其显示在输出中。
方法 1:使用 bufio 和 os 包
在本例中,bufio.NewScanner 用于逐行读取内容,os.Open 用于打开文件。只要有行要读取并且存在扫描器,scan 方法就会返回 true。当前读取的行由 text 返回。函数返回时,文件将使用 defer 语句关闭。
语法
os.Open
此函数是 os 包的一部分。它用于打开一个文件进行读取。它接受一个输入,即要打开的文件名。
bufio.NewScanner
此函数是 bufio 包的一部分。它用于创建一个扫描器对象来读取文件中的数据。
算法
步骤 1 − 创建一个 package 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,使用该函数。然后使用 string 函数和 strings 将内容转换为字符串。使用 Split 函数将字符串分割成多行,每行用换行符分隔。之后,for 循环在遍历行后打印每一行。
语法
Ioutil.ReadFile
此函数在 ioutil 包中可用,用于读取文件的内容,文件名作为函数的输入
算法
步骤 1 − 创建一个 package 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 包。
数据结构
网络
RDBMS
操作系统
Java
iOS
HTML
CSS
Android
Python
C 语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP