golang中bufio和ioutil的使用


bufio

  • bufio包實現了帶緩沖區的讀寫,是對文件讀寫的封裝
  • bufio緩沖寫數據
模式 含義
os.O_WRONLY 只寫
os.O_CREATE 創建文件
os.O_RDONLY 只讀
os.O_RDWR 讀寫
os.O_TRUNC 清空
os.O_APPEND 追加
  • bufio讀、寫數據
func main() {
	//wr()
	re()
}
func re() {
	// 讀文件用os.Open
	file, err := os.Open("./t01.txt")
	if err != nil {
		fmt.Println(err.Error())
		return
	}
	defer file.Close()
	// 獲取reader對象
	reader := bufio.NewReader(file)
	for {
		line, _, err := reader.ReadLine()
		if err == io.EOF {
			break
		}
		if err != nil {
			fmt.Println(err.Error())
			return
		}
		fmt.Println(string(line))
	}
}
func wr() {
	// 寫文件用os.OpenFile
	file, err := os.OpenFile("t01.txt", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
	if err != nil {
		fmt.Println(err.Error())
		return
	}
	defer file.Close()
	// 獲取Writer對象
	writer := bufio.NewWriter(file)
	for i := 0; i < 10; i++ {
		writer.WriteString(fmt.Sprintf("hello %d\n", i))
	}
	// 刷新緩沖區,強制寫出
	writer.Flush()
}

ioutil工具包

  • 工具包寫文件
  • 工具包讀取文件
func main() {
 //wr()
 re()
}
func wr() {
	if err := ioutil.WriteFile("./t02.txt", []byte("哈哈哈哈\n"), 0644); err != nil {
		fmt.Println(err.Error())
		return
	}
}
func re() {
	data, err := ioutil.ReadFile("./t02.txt")
	if err != nil {
		fmt.Println(err.Error())
		return
	}
	fmt.Println(string(data))
}

例子:實現一個Cat命令

使用文件操作相關知識,模擬實現linux平台cat命令的功能。

func main() {
	flag.Parse()  // 解析命令行參數
	if flag.NArg() == 0 {
		// 如果沒有參數,默認從標准輸入讀取內容
		reader := bufio.NewReader(os.Stdin)
		cat(reader)
	}
	// 依次讀取每個指定文件的內容,並打印到終端
	for i := 0; i < flag.NArg(); i++ {
		file, err := os.Open(flag.Arg(i))
		if err != nil {
			fmt.Fprintf(os.Stdout, "reading from %s failed, err: %v \n", flag.Arg(i), err)
			continue
		}
		cat(bufio.NewReader(file))
	}
}

// cat 命令實現
func cat (r *bufio.Reader) {
	for {
		buf, err := r.ReadBytes('\n')  // 注意是字符
		if err == io.EOF {
			break
		}
		fmt.Fprintf(os.Stdout, "%s", buf)
	}
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM