Go语言程序:从现有文件中读取指定数量的字符
在Go语言中,我们可以使用`ioutil.ReadFile()`读取文件,并使用for循环计时器来限制读取的字符数,同时使用`os.Open`和`bufio.NewReader`函数分别执行文件操作和读取操作。本文将学习如何使用Go语言的`os`和`bufio`包从现有文件中读取指定数量的字符。
语法
ioutil.ReadFile(file)
`ReadFile()`函数位于`ioutil`包中,用于读取给定文件。该函数接受要读取的文件作为参数。要从文件中读取指定数量的字符,我们可以使用`ReadFile`函数,然后从返回的字节切片中提取所需的字符数量。
File.Read(file name)
`Read`方法返回两个值:实际读取的字符数 (n) 和错误 (err)。我们检查是否存在错误,如果存在,则检查错误是否为EOF(文件结尾)错误。如果不是EOF错误,则打印错误消息并返回。
bufio.NewReader()
此函数属于Go的`bufio`包。此函数的主要目标是以较大的块而不是逐行读取数据并存储在缓冲区中。`io.reader`和缓冲区大小作为参数传递给此函数。
os.Open()
此函数是`os`包的一部分。它用于打开文件以进行读取。它接受一个输入,即要打开的文件名。
方法一
在这种方法中,我们将使用`ioutil`包中提供的`Read()`函数从现有文件中读取字符。
算法
首先,我们需要导入`fmt`和`ioutil`包。
现在,启动`main()`函数。在`main()`函数内部,使用`ReadFile()`函数读取文件的内容。
检查读取文件时是否存在任何错误。如果发生错误,则在屏幕上打印错误消息。
如果没有生成错误,则在屏幕上打印文件的内容。
使用`fmt.Println`函数将切片后的字节切片打印为字符串。
示例
在下面的示例中,我们将创建一个Go语言程序,使用`ioutil`包从现有文件中读取指定数量的字符。
package main import ( "fmt" "io/ioutil" ) func main() { content, err := ioutil.ReadFile("file.txt") if err != nil { fmt.Println("Error reading file:", err) return } if len(content) < 5 { fmt.Println("File is too small to read 5 characters") return } characters := content[:] fmt.Println("The contents of given file are:\n", string(characters)) }
输出
History of Computers It is very difficult to find the exact origin of computers. But according to some experts computer exists at the time of world war-II. Also, at that time they were used for keeping data. But, it was for only government use and not for public use. Above all, in the beginning, the computer was a very large and heavy machine.
方法二
在这种方法中,我们将编写一个Go语言程序,使用`bufio`包中提供的`Read()`函数从文件中读取指定的字符。要使用`bufio`包从文件中读取指定数量的字符,我们可以使用`NewReader`函数创建一个新的缓冲区读取器,然后使用`Read`方法读取所需数量的字符。
算法
首先,我们需要导入“os”、“fmt”和“bufio”包。
现在,调用`main()`函数。在`main()`函数内部,调用`Open()`函数打开文件,并调用`bufio.NewReader`函数为文件创建一个新的读取器。
使用读取器的`Read`方法将指定数量的字符读取到字节切片中。
检查读取文件时是否发生错误。如果发生错误,则在屏幕上打印错误消息。
如果没有发生错误,则使用`fmt.Println`函数将字节切片打印为字符串。
示例
在这个示例中,我们将学习如何使用Go语言的`os`和`bufio`包从现有文件中读取指定数量的字符。
package main import ( "bufio" "fmt" "os" ) func main() { file, err := os.Open("file.txt") if err != nil { fmt.Println("Error opening file:", err) return } defer file.Close() reader := bufio.NewReader(file) characters := make([]byte, 400) n, err := reader.Read(characters) if err != nil { fmt.Println("Error reading file:", err) return } if n < 5 { fmt.Println("File is too small to read 5 characters") return } fmt.Println(string(characters)) }
输出
The history of programming languages spans from documentation of early mechanical computers to modern tools for software development. Early programming languages were highly specialized, relying on mathematical notation and similarly obscure Syntax. Throughout the 20th century, research in compiler theory led to the creation of high-level programming languages.
方法三
在这种方法中,我们将编写一个Go语言程序,使用`io`包中提供的各种函数从现有文件中读取指定数量的字符。
算法
首先,我们需要导入“fmt”、“io”和“os”包。
然后,启动`main()`函数。在`main()`函数内部,使用`os.Open`函数打开文件。
检查打开文件时是否发生错误。如果发生错误,则打印错误消息并返回。
如果没有发生错误,则使用文件的`Read`方法将指定数量的字符读取到字节切片中。
检查读取文件时是否发生错误。
如果发生错误,则打印错误消息并返回。如果没有发生错误,则检查实际读取的字符数是否小于所需的字符数。
如果是,则打印一条消息,说明文件太小,无法读取所需的字符数。
如果实际读取的字符数等于或大于所需的字符数,则使用`fmt.Println`函数将字节切片打印为字符串。
示例
在这个示例中,我们将学习如何创建一个Go语言程序,使用`io`和`os`包从现有文件中读取指定数量的字符。
package main import ( "fmt" "io" "os" ) func main() { file, err := os.Open("file.txt") if err != nil { fmt.Println("Error opening file:", err) return } defer file.Close() characters := make([]byte, 450) n, err := file.Read(characters) if err != nil && err != io.EOF { fmt.Println("Error reading file:", err) return } if n < 5 { fmt.Println("File is too small to read 5 characters") return } fmt.Println(string(characters)) }
输出
Modern humans (Homo sapiens), the species? that we are, means ‘wise man’ in Latin. Our species is the only surviving species of the genus Homo but where we came from has been a topic of much debate. Modern humans originated in Africa within the past 200,000 years and evolved from their most likely recent common ancestor, Homo erectus, which means ‘upright man’ in Latin. Homo erectus is an extinct species of human that lived between 1.9 million and 135,000 years ago.
结论
我们已经成功地编译并执行了一个Go语言程序,该程序可以从现有文件中读取指定数量的字符,并附带示例。这里我们使用了三个示例。第一个示例使用了`ioutil`包,它提供了一个易于使用的文件读取函数,而`bufio`和`io`包提供了更灵活、更高效的文件读取方法,分别用于第二个和第三个示例。在第三个示例中,我们使用了`os`包。