如何阅读文本文件?

我正在尝试读取“ file.txt”,然后使用Golang将内容放入变量中。这是我尝试过的…

package main

import (

"fmt"

"os"

"log"

)

func main() {

file, err := os.Open("file.txt")

if err != nil {

log.Fatal(err)

}

fmt.Print(file)

}

文件已成功读取,并且从 os.Open 返回的返回类型为

回答:

这取决于您要执行的操作。

file, err := os.Open("file.txt")

fmt.print(file)

它输出&{0xc082016240}的原因是因为您正在打印文件描述符(*os.File)的指针值,而不是文件内容。要获取文件内容,可以READ从文件描述符中获取。


要将所有文件内容(以字节为单位)读取到内存, ioutil.ReadAll

package main

import (

"fmt"

"io/ioutil"

"os"

"log"

)

func main() {

file, err := os.Open("file.txt")

if err != nil {

log.Fatal(err)

}

defer file.Close()

b, err := ioutil.ReadAll(file)

fmt.Print(b)

}

但是有时,如果文件很大,则仅读取块可能会提高内存效率:缓冲区大小,因此可以使用io.Reader.Readfrom 的实现*os.File

func main() {

file, err := os.Open("file.txt")

if err != nil {

log.Fatal(err)

}

defer file.Close()

buf := make([]byte, 32*1024) // define your buffer size here.

for {

n, err := file.Read(buf)

if n > 0 {

fmt.Print(buf[:n]) // your read buffer.

}

if err == io.EOF {

break

}

if err != nil {

log.Printf("read %d bytes: %v", n, err)

break

}

}

}

否则,您也可以使用标准的util软件包:bufio,尝试Scanner。A Scanner使用令牌:分隔符读取文件。

默认情况下,扫描程序通过换行符使令牌前进(当然,您可以自定义扫描程序应如何对文件进行令牌化,可以从bufio测试中了解)。

package main

import (

"fmt"

"os"

"log"

"bufio"

)

func main() {

file, err := os.Open("file.txt")

if err != nil {

log.Fatal(err)

}

defer file.Close()

scanner := bufio.NewScanner(file)

for scanner.Scan() { // internally, it advances token based on sperator

fmt.Println(scanner.Text()) // token in unicode-char

fmt.Println(scanner.Bytes()) // token in bytes

}

}

最后,我还想向您推荐这个很棒的网站:go-lang file

cheatsheet。它包含了与在go-

lang中处理文件有关的几乎所有内容,希望您会发现它有用。

以上是 如何阅读文本文件? 的全部内容, 来源链接: utcz.com/qa/408125.html

回到顶部