golang读取文件的常用方法总结
2019-04-01 20:19
579 查看
使用go语言读取文件的各种方式整理。
一次性加载到内存中
// * 整个文件读到内存,适用于文件较小的情况 //每次读取固定字节 //问题容易出现乱码,因为中文和中文符号不占一个字符 func readAllIntoMemory(filename string) (content []byte, err error) { fp, err := os.Open(filename) // 获取文件指针 if err != nil { return nil, err } defer fp.Close() fileInfo, err := fp.Stat() if err != nil { return nil, err } buffer := make([]byte, fileInfo.Size()) _, err = fp.Read(buffer) // 文件内容读取到buffer中 if err != nil { return nil, err } return buffer, nil }
一次性加载到内存中适用于小文件。 如果文件太大, 内存紧张的情况下, 可以借助缓冲, 分多次读取。
分块读取
// * 一块一块地读取, 即给一个缓冲, 分多次读到缓冲中 //按字节读取,将整个文件读取到缓冲区buffer func readByBlock(filename string) (content []byte, err error) { fp, err := os.Open(filename) // 获取文件指针 if err != nil { return nil, err } defer fp.Close() const bufferSize = 64 // 缓冲大小, 每次读取64个字节 buffer := make([]byte, bufferSize) for { // 注意这里要取bytesRead, 否则有问题 bytesRead, err := fp.Read(buffer) // 文件内容读取到buffer中 content = append(content, buffer[:bytesRead]...) if err != nil { if err == io.EOF { err = nil break } else { return nil, err } } } return }
有时我们也需要按行处理
按行读
// 逐行读取, 一行是一个[]byte, 多行就是[][]byte func readByLine(filename string) (lines [][]byte, err error) { fp, err := os.Open(filename) // 获取文件指针 if err != nil { return nil, err } defer fp.Close() bufReader := bufio.NewReader(fp) for { line, _, err := bufReader.ReadLine() // 按行读 if err != nil { if err == io.EOF { err = nil break } } else { lines = append(lines, line) } } return }
使用ioutil读取文件的所有内容
func test1() { bytes,err := ioutil.ReadFile("filetoread.txt") if err != nil { log.Fatal(err) } fmt.Println("total bytes read:",len(bytes)) fmt.Println("string read:",string(bytes)) }
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接
您可能感兴趣的文章:
相关文章推荐
- golang读取文件的常用方法
- golang几种常用配置文件使用方法总结(yaml、toml、json、xml、ini)
- perl正则表达式,文件读取常用方法
- 让你提前认识软件开发(18):C语言中常用的文件操作函数总结及使用方法演示代码
- PHP 获取远程文件大小常用方法总结
- JAVA中读取文件(二进制,字符)内容的几种方法总结
- C#读取XML文件常用的几种方法
- 读取配置文件的若干种方法总结
- python 常用读取文件调用方法
- Java读取properties配置文件常用方法
- php中读取以及写入文件的方法总结
- PHP中读取文件的几个方法总结(推荐)
- Android 读取文件内容实现方法总结
- 读取Java文件到byte数组的三种方法(总结)
- 【方法总结】创建、读取、删除文件相关操作
- 对python .txt文件读取及数据处理方法总结
- R语言:64位操作系统读取excel文件方法总结
- java读取文件的方法总结
- JAVA读取属性文件的几种方法总结
- 总结C/C++下读取文件大小的方法