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()
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章