问题
使用这个方法实现会发现,最后一行的数据没有了。于是更改一下方案。
这个方案是根据教程撸的,但是出现了问题,先知道下面的解决方案。这个问题在后边探讨。现在没有实际的应用环境,也摸不到问题的点出现在哪
其实在学习的过程中,我们没有必要纠结一个点,咔咔的经验是,除非当日工作需要是不会对一个难点进行死磕的。慢慢的根据自己的知识提升会有更好的方案取而代之,或者问题的解决思路
func main() { file, e := os.OpenFile("D:/kaka.txt", os.O_RDONLY, 0666) if e != nil { fmt.Println("文件打开失败:err", e) return } else { fmt.Println("文件打开成功") } // 打开时立刻挂起关闭程序 defer func() { file.Close() fmt.Println("文件关闭成功") }() // 创建文件的读取器 reader := bufio.NewReader(file) // 死循环读取 for { // 以换行符为界,分批次读取数据,得到readString readString, e := reader.ReadString('\n') //line, _, e := reader.ReadLine() if e != nil { fmt.Println("文件读取失败;err", e) // 如果已到文件末尾,则直接结束 if e == io.EOF { time.Sleep(time.Second) break } } fmt.Print(readString) //fmt.Println(string(line)) } fmt.Println("读取结束") }
更改
直接调用接口实现
/** 关于文件读取少了一行的另一种解决方案 */ func main() { file, e := os.Open("d:/kaka.txt") if e != nil { fmt.Println("文件打开失败") } else { fmt.Println("文件打开成功") // 创建文件读取器 reader := bufio.NewScanner(file) for reader.Scan() { fmt.Println(reader.Text()) } } }