一、文件操作
go语言中提供了多种文件操作的方式,在使用过程中需要根据实际情况来选择。
二、实战
package main
import (
	"bufio"
	"fmt"
	"io"
	"io/ioutil"
	"os"
)
/**
文件操作
 */
func main() {
	//打开文件
	fileObj, err := os.Open("../go/src/zy.txt")
	if err != nil {
		fmt.Printf("open failed err:%v \n", err)
		return
	}
	//延迟关闭文件
	defer fileObj.Close()
	//读取文件内容
	var tempFile = make([]byte, 256)
	n, errs := fileObj.Read(tempFile)
	if errs != nil {
		fmt.Printf("read failed %v", errs)
		return
	}
	fmt.Println("read bytes from file", n)
	// 输出文件内容
	fmt.Print(string(tempFile), "\n")
	//readAll()
	//readBufio()
	//iotilRead()
	//write()
	//writeBufio()
	ioUtilWrite()
}
//使用io 读取
func readAll() {
	//打开文件
	fileObj, err := os.Open("../go/src/read.txt")
	if err != nil {
		fmt.Printf("open failed err:%v \n", err)
		return
	}
	//延迟关闭文件
	defer fileObj.Close()
	//读取文件内容
	var tempFile = make([]byte, 256)
	for {
		n, errs := fileObj.Read(tempFile)
		// 文件是否读取结束
		if errs == io.EOF {
			fmt.Println(tempFile[:n])
			return
		}
		if errs != nil {
			fmt.Printf("read failed errs:%v \n ", errs)
			return
		}
		fmt.Printf("read %d bytes from file \n", n)
		// 输出文件内容
		fmt.Print(string(tempFile[:n]))
	}
}
//使用 bufio 读取
func readBufio() {
	//打开文件
	fileObj, err := os.Open("../go/src/read.txt")
	if err != nil {
		fmt.Printf("open failed err:%v \n", err)
		return
	}
	//延迟关闭文件
	defer fileObj.Close()
	//读取文件内容
	//var tempFile = make([]byte, 256)
	reader := bufio.NewReader(fileObj)
	for {
		line, errs := reader.ReadString('\n')
		// 文件是否读取结束
		if errs == io.EOF {
			fmt.Println(line)
			return
		}
		if errs != nil {
			fmt.Printf("read failed errs:%v \n ", errs)
			return
		}
		//fmt.Println("read bytes from file", line)
		// 输出文件内容
		fmt.Print(string(line))
	}
}
// ioUtil 读取文件
func iotilRead() {
	file, err := ioutil.ReadFile("../go/src/read.txt")
	if err != nil {
		fmt.Printf("read file error:%v \n", err)
		return
	}
	fmt.Println(string(file))
}
// 文件写入
func write() {
	file, err := os.OpenFile("../go/src/read.txt", os.O_CREATE|os.O_WRONLY|os.O_TRUNC, 0644)
	if err != nil {
		fmt.Printf("write file error %v\n", err)
		return
	}
	// 关闭文件流
	defer file.Close()
	str := "tom like go "
	file.WriteString(str)
}
// 使用writeBufio 写入
func writeBufio() {
	file, err := os.OpenFile("../go/src/read.txt", os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0644)
	if err != nil {
		fmt.Printf("write file error %v\n", err)
		return
	}
	// 关闭文件流
	defer file.Close()
	writer := bufio.NewWriter(file)
	str := "钟渊在学习 哈哈哈"
	writer.WriteString(str)
	writer.Flush()
}
// ioUtil 操作文件写入
func ioUtilWrite() {
	str := "今天是星期六"
	error := ioutil.WriteFile("../go/src/read.txt", []byte(str), 0644)
	if error != nil {
		fmt.Println(" file write error", error)
		return
	}
}









