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
}