读取
- 一次性读取
data, err := os.ReadFile("filename.txt")
if err != nil {log.Fatal(err)
}
fmt.Println(string(data))
- 按行读取
方式1:bufio.NewScanner
file, err := os.Open("filename.txt")
if err != nil {panic(err)
}
defer file.Close()scanner := bufio.NewScanner(file)
for scanner.Scan() {fmt.Println(scanner.Text())
}if err := scanner.Err(); err != nil {log.Fatal(err)
}
方式2:bufio.NewReader
file, err := os.Open("filename.txt")
if err != nil {panic(err)
}
defer file.Close()reader:= bufio.NewReader(file)
for {line, _, err := reader.ReadLine()if err == io.EOF {break}fmt.Println(string(line))
}
区别是bufio.NewScanner
还可自定义扫描的分隔符,如:
file, _ := os.Open("filename.txt")
scanner := bufio.NewScanner(file)
//scanner.Split(bufio.ScanLines) // 按行读,是默认读取方式
//scanner.Split(bufio.ScanWords) // 按单词读,返回文本中每个以空格分隔的单词,并删除周围的空格
//scanner.Split(bufio.ScanBytes) // 按字节读
//scanner.Split(bufio.ScanRunes) // 按 UTF-8 编码的字符读,如:中文字符for scanner.Scan() {println(scanner.Text())
}
- 按指定字节长度读取
可以使用bufio.NewReader
的Read
方法,能读取指定长度的字节到一个切片中
package mainimport ("bufio""fmt""os"
)func main() {file, err := os.Open("filename.txt")if err != nil {fmt