两种模式:
– 流式
– 分片
- 流式
// 文件一块一块的读取,buf为1k
func ReadBlockBy1KBuf(path string) {
fi, err := os.Open(path)
if err != nil {
log.Println(err)
return
}
defer fi.Close()
// 设置每次读取字节数
buffer := make([]byte, 1024)
for {
n, err := fi.Read(buffer)
// 根据实际调整控制条件
if err != nil && err != io.EOF {
log.Println(err)
}
if n == 0 {
break
}
// 如下代码打印出每次读取的文件块(字节数)
//fmt.Println(string(buffer[:n]))
}
}
- 分片
// 读取文件的每一行
func ReadEachLineReader(filePath string) {
FileHandle, err := os.Open(filePath)
if err != nil {
log.Println(err)
return
}
defer FileHandle.Close()
lineReader := bufio.NewReader(FileHandle)
for {
// 相同使用场景下可以采用的方法
// func (b *Reader) ReadLine() (line []byte, isPrefix bool, err error)
// func (b *Reader) ReadBytes(delim byte) (line []byte, err error)
// func (b *Reader) ReadString(delim byte) (line string, err error)
_, _, err := lineReader.ReadLine()
if err == io.EOF {
break
}
// 打印每次读取的文件行内容
//fmt.Println(string(line))
}
}
// 读取文件的每一行
func ReadEachLineScanner(filePath string) {
FileHandle, err := os.Open(filePath)
if err != nil {
log.Println(err)
return
}
defer FileHandle.Close()
lineScanner := bufio.NewScanner(FileHandle)
for lineScanner.Scan() {
// 相同使用场景下可以使用如下方法
// func (s *Scanner) Bytes() []byte
// func (s *Scanner) Text() string
// 打印每次读取的文件行内容
//fmt.Println(lineScanner.Text())
}
}