Golang 文件操作

发布时间:2024年01月11日

读取

  1. 一次性读取
data, err := os.ReadFile("filename.txt")
if err != nil {
   
    log.Fatal(err)
}
fmt.Println(string(data))
  1. 按行读取

方式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.Scanner 还可自定义扫描的分隔符,如:

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())
}
  1. 按指定字节长度读取
    可以使用 bufio.ReaderRead 方法,能读取指定长度的字节到一个切片中
package main

import (
	"bufio"
	"fmt"
	"os"
)

func main() {
   
	file, err := os.Open("filename.txt")
	if err != nil {
   
		fmt.
文章来源:https://blog.csdn.net/e5pool/article/details/135516820
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。