GoLang 文件读写

一、读写文件

1、使用ioutil,将文件全部读入内存

读ioutil.ReadFile(filePath)

写ioutil.WriteFile(filePath, d, 0666)

2、使用文件指针

读file.Read(buf)

写file.Write(buf)

3、缓冲包装器

读bufio.NewReader(file)

写bufio.NewWriter(file)

package main

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

/**
	使用ioutil读写文件(覆盖)
*/
func readFileByIOUtil(filePath string) {
	if !CheckFileExist(filePath) {
		fmt.Println("文件不存在")
		return
	}
	bytes, err := ioutil.ReadFile(filePath)
	if err != nil {
		fmt.Println("read file fail", err)
		return
	}
	fmt.Println("文件内容如下")
	fmt.Println(string(bytes))
}

func writeFileByIOUtil(filePath string, content string) {
	var bytes = []byte(content)
	err := ioutil.WriteFile(filePath, bytes, 0666)
	if err != nil {
		fmt.Println("write file fail", err)
		return
	}
	fmt.Println("写入字节数:", len(bytes))
}

/**
	使用文件句柄读写文件
*/
func readFileByHandle(filePath string) {
	if !CheckFileExist(filePath) {
		fmt.Println("文件不存在")
		return
	}
	file, err := os.Open(filePath)
	if err != nil {
		fmt.Println("read file fail", err)
		return
	}
	var chunk []byte
	var buf = make([]byte, 1024)
	for {
		n, err := file.Read(buf)
		if err != nil && err != io.EOF {
			fmt.Println("read buf fail", err)
			return
		}
		if n == 0{
			break
		}
		chunk = append(chunk, buf[:n]...)
	}
	fmt.Println(string(chunk))
}

func writeFileByHandle(filePath string, content string) {
	var file *os.File
	var err error
	if CheckFileExist(filePath) {
		file, err = os.OpenFile(filePath, os.O_APPEND, 0666)
		if err != nil {
			fmt.Println("file open fail", err)
			return
		}
	} else {
		file, err = os.Create(filePath)
		if err != nil {
			fmt.Println("file create fail", err)
			return
		}
	}

	var bytes = []byte(content)
	n, err := file.Write(bytes)
	if err != nil {
		fmt.Println("write error", err)
		return
	}
	fmt.Println("写入的字节数:", n)
}

/**
	使用bufio读写文件
*/
//	读行
func readFileByBufio1(filePath string) {
	if !CheckFileExist(filePath) {
		fmt.Println("文件不存在")
		return
	}
	file, err := os.Open(filePath)
	if err != nil {
		fmt.Println("read file fail", err)
		return
	}
	reader := bufio.NewReader(file)
	var chunk []byte

	for {
		lineBytes, err := reader.ReadBytes('\n')
		//去掉字符串首尾空白字符,返回字符串
		line := strings.TrimSpace(string(lineBytes))
		if err != nil && err != io.EOF {
			panic(err)
		}
		if err == io.EOF {
			break
		}
		fmt.Println(line)
		fmt.Println("--------------------")
	}
	fmt.Println(string(chunk))
}

//	读字节
func readFileByBufio2(filePath string) {
	if !CheckFileExist(filePath) {
		fmt.Println("文件不存在")
		return
	}
	file, err := os.Open(filePath)
	if err != nil {
		fmt.Println("read file fail", err)
		return
	}
	reader := bufio.NewReader(file)
	var chunk []byte
	buf := make([]byte, 1024)

	for {
		n, err := reader.Read(buf)
		if err != nil && err != io.EOF {
			panic(err)
		}
		if 0 == n {
			break
		}
		//fmt.Println(string(buf))
		chunk = append(chunk, buf...)
	}
	fmt.Println(string(chunk))
}

func writeFileByBufio(filePath string, content string) {
	var file *os.File
	var err error
	if CheckFileExist(filePath) {
		file, err = os.OpenFile(filePath, os.O_APPEND, 0666)
		if err != nil {
			fmt.Println("file open fail", err)
			return
		}
	} else {
		file, err = os.Create(filePath)
		if err != nil {
			fmt.Println("file create fail", err)
			return
		}
	}
	if file != nil {
		write := bufio.NewWriter(file)
		n, _ := write.WriteString(content)
		fmt.Printf("写入字节数:", n)
		_ = write.Flush()
		file.Close()
	}
}

func CheckFileExist(filePath string) bool {
	_, err := os.Stat(filePath)
	if os.IsNotExist(err) {
		return false
	}
	return true
}

你可能感兴趣的:(golang)