GO 文件讀取常用的方法
方式1: 一行一行的方式讀取
其中常用的方法就有:ReadString,ReadLine,ReadBytes
ReadLine 返回單個行,不包括行尾字節,就是說,返回的內容不包括\n或者\r\n,返回的類型為[]byte
ReadString('\n') 以分隔字符方式讀取,遇到傳入的分割字符時就返回結果,返回的結果包含分隔字符本身,返回的類型為string,比如傳入\n,代碼遇到\n字符就返回,而文件行尾都是以\n結尾,所以ReadString('\n')就實現了分行讀取
ReadBytes('\n') 和ReadString方法差不多,只是結果以[]byte類型返回數據
文件讀取需要注意點:
記得處理完后關閉文件,以防止內存泄露,占用操作系統文件句柄數
文件讀取結束后返回的err類型是io.EOF,可以使用這個來跳出循環
方式一源碼例子:
package main
import (
"bufio"
"fmt"
"io"
"os"
)
func main() {
// 讀取一個文件的內容
file, err := os.Open("./abc.txt")
if err != nil {
fmt.Println("open file err:", err.Error())
return
}
// 處理結束后關閉文件
defer file.Close()
// 使用bufio讀取
r := bufio.NewReader(file)
for {
// 分行讀取文件 ReadLine返回單個行,不包括行尾字節(\n 或 \r\n)
//data, _, err := r.ReadLine()
// 以分隔符形式讀取,比如此處設置的分割符是\n,則遇到\n就返回,且包括\n本身 直接返回字符串
data, err := r.ReadString('\n')
// 打印出內容
fmt.Printf("%v", string(data))
fmt.Println("-------------------------")
// 以分隔符形式讀取,比如此處設置的分割符是\n,則遇到\n就返回,且包括\n本身 直接返回字節數數組
// data, err := r.ReadBytes('\n')
// 讀取到末尾退出
if err == io.EOF {
if len(line) > 0 {
fmt.Println(line)
}
break
}
if err != nil {
fmt.Println("read err", err.Error())
break
}
// 打印出內容
fmt.Printf("%v", string(data))
}
}
方式2: 一次性讀取
一次性讀取適合讀取內容比較小的文件,大文件讀取建議使用第一種方式
一次性讀取可以使用ioutil.ReadFile方法,次方法不需要關閉文件,源碼例子如下:
package main
import (
"fmt"
"io/ioutil"
)
func main() {
// 使用ioutil一次性讀取文件
data, err := ioutil.ReadFile("./abc.txt")
if err != nil {
fmt.Println("read file err:", err.Error())
return
}
// 打印文件內容
fmt.Println(string(data))
}
原文鏈接:https://blog.csdn.net/weixin_39015119/article/details/103533432