golang读取文件的常用方法总结
使用go语言读取文件的各种方式整理。
一次性加载到内存中
//*整个文件读到内存,适用于文件较小的情况 //每次读取固定字节 //问题容易出现乱码,因为中文和中文符号不占一个字符 funcreadAllIntoMemory(filenamestring)(content[]byte,errerror){ fp,err:=os.Open(filename)//获取文件指针 iferr!=nil{ returnnil,err } deferfp.Close() fileInfo,err:=fp.Stat() iferr!=nil{ returnnil,err } buffer:=make([]byte,fileInfo.Size()) _,err=fp.Read(buffer)//文件内容读取到buffer中 iferr!=nil{ returnnil,err } returnbuffer,nil }
一次性加载到内存中适用于小文件。如果文件太大,内存紧张的情况下,可以借助缓冲,分多次读取。
分块读取
//*一块一块地读取,即给一个缓冲,分多次读到缓冲中 //按字节读取,将整个文件读取到缓冲区buffer funcreadByBlock(filenamestring)(content[]byte,errerror){ fp,err:=os.Open(filename)//获取文件指针 iferr!=nil{ returnnil,err } deferfp.Close() constbufferSize=64//缓冲大小,每次读取64个字节 buffer:=make([]byte,bufferSize) for{ //注意这里要取bytesRead,否则有问题 bytesRead,err:=fp.Read(buffer)//文件内容读取到buffer中 content=append(content,buffer[:bytesRead]...) iferr!=nil{ iferr==io.EOF{ err=nil break }else{ returnnil,err } } } return }
有时我们也需要按行处理
按行读
//逐行读取,一行是一个[]byte,多行就是[][]byte funcreadByLine(filenamestring)(lines[][]byte,errerror){ fp,err:=os.Open(filename)//获取文件指针 iferr!=nil{ returnnil,err } deferfp.Close() bufReader:=bufio.NewReader(fp) for{ line,_,err:=bufReader.ReadLine()//按行读 iferr!=nil{ iferr==io.EOF{ err=nil break } }else{ lines=append(lines,line) } } return }
使用ioutil读取文件的所有内容
functest1(){ bytes,err:=ioutil.ReadFile("filetoread.txt") iferr!=nil{ log.Fatal(err) } fmt.Println("totalbytesread:",len(bytes)) fmt.Println("stringread:",string(bytes)) }
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对毛票票的支持。如果你想了解更多相关内容请查看下面相关链接