golang 文件读取入门

  • os.File
  • bufio
  • ioutil
package main

import (
	"bufio"
	"bytes"
	"fmt"
	"io"
	"io/ioutil"
	"os"
)

func readFileStat()  {
	file, err := os.Open("./main.go")
	if err != nil {
		fmt.Printf("file open err %v", err)
	}
	defer file.Close()
	info , _ := file.Stat()
	fmt.Printf("%#v", info)
}

func readFromFileRead(){
	file, err := os.Open("./main.go")
	if err != nil {
		fmt.Printf("file open err %v", err)
	}
	defer file.Close()
	for {
		var b [128]byte
		n, err := file.Read(b[:])
		if err == io.EOF {
			fmt.Printf("end of file")
		}
		fmt.Printf(string(b[:]))
		if n < 128 {
			break
		}
	}
}

func readFromBufioReadString(){
	file, err := os.Open("./main.go")
	if err != nil {
		fmt.Printf("file open err %v", err)
	}
	defer file.Close()
	buf := bufio.NewReader(file)
	for{
		str, err := buf.ReadString('\n')
		if err == io.EOF{
			fmt.Println("end of file")
			break
		}
		fmt.Println(str)
	}
}

func readFromBufioReadLine(){
	file, err := os.Open("./main.go")
	if err != nil {
		fmt.Printf("file open err %v", err)
	}
	defer file.Close()
	buf := bufio.NewReader(file)
	for{
		line, _, err := buf.ReadLine()
		if err == io.EOF {
			break
		}
		fmt.Println(string(line))
	}
}

// NewScanner 读取文件一行,不会读取结尾的换行
func readFromBufioNewScannerText(){
	file, err := os.Open("./main.go")
	if err != nil {
		fmt.Printf("file open err %v", err)
	}
	defer file.Close()
	scanner := bufio.NewScanner(file)
	for scanner.Scan(){
		// 也可以缓存到bytes.Buffer中
		fmt.Println(scanner.Text())
	}
	file.Seek(0, 0) // 文件读取位置重置到开始位置
	fmt.Println("用buffer读取")
	scanner = bufio.NewScanner(file)
	buffer := bytes.Buffer{}
	for scanner.Scan() {
		buffer.WriteString(scanner.Text())
		buffer.WriteString("\n")
	}
	fmt.Println(buffer.String())
}

func readFromIoutil(){
	b, err := ioutil.ReadFile("./main.go")
	if err != nil {
		fmt.Printf("file read errL:%v", err)
	}
	fmt.Print(string(b))
}

func main()  {
	// readFileStat()
	// readFromFileRead()
	// readFromBufferReadString()
	// readFromBufferReadLine()
	// readFromBufioNewScannerText()
	readFromIoutil()
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值