如何在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) }