如何在Golang中将整个文件读入stringvariables?

我有很多小文件,我不想逐行阅读。

Golang中是否有一个函数让我将整个文件读入一个stringvariables?

使用ioutil.ReadFile :

func ReadFile(filename string) ([]byte, error) 

ReadFile读取由文件名命名的文件并返回内容。 一个成功的调用返回err == nil,而不是err == EOF。 由于ReadFile读取整个文件,因此不会将Read中的EOF视为要报告的错误。

你会得到一个[]byte而不是一个string 。 如果真的有必要,可以转换它:

 s := string(buf) 

我认为最好的办法是,如果你真的关心连接所有这些文件的效率,就把它们全部复制到相同的字节缓冲区中。

 buf := bytes.NewBuffer(nil) for _, filename := range filenames { f, _ := os.Open(filename) // Error handling elided for brevity. io.Copy(buf, f) // Error handling elided for brevity. f.Close() } s := string(buf.Bytes()) 

这将打开每个文件,将其内容复制到buf中,然后closures该文件。 根据您的情况,您可能不需要实际转换它,最后一行是显示buf.Bytes()包含您要查找的数据。

如果你只是想将内容作为string ,那么简单的解决scheme就是使用io/ioutil包中的ReadFile函数。 这个函数返回一个bytes片段,你可以很容易地转换成一个string

 package main import ( "fmt" "io/ioutil" ) func main() { b, err := ioutil.ReadFile("file.txt") // just pass the file name if err != nil { fmt.Print(err) } fmt.Println(b) // print the content as 'bytes' str := string(b) // convert content to a 'string' fmt.Println(str) // print the content as a 'string' } 

这是我做到的:

 package main import ( "fmt" "os" "bytes" ) fun main() { filerc, err := os.Open("filename") if err != nil{ log.Fatal(err) } defer filerc.Close() buf := new(bytes.Buffer) buf.ReadFrom(filerc) contents := buf.String() fmt.Print(contents) } 
Interesting Posts