golang:常用文件读写操作


文件读取:

package main

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

func ReadByOs() { //os库
	f, err := os.Open("./in.txt") //os.Open():以只读方式打开文件
	if err != nil {
		fmt.Printf("os.Open() failed, err:%v. ", err)
	}
	defer f.Close()
	buf := make([]byte, 1024)
	for { //循环读取文件数据
		_, err := f.Read(buf)
		if err == io.EOF {
			break
		}
		if err != nil {
			fmt.Printf("f.Read() failed, err:%v. ", err)
		}
		fmt.Print(string(buf))
	}
}
func ReadByBufio() { //bufio库,在os库file的基础上封装了一层API
	f, err := os.Open("./in.txt") //os.Open():以只读方式打开文件
	if err != nil {
		fmt.Printf("os.Open() failed, err:%v. ", err)
	}
	defer f.Close()
	reader := bufio.NewReader(f)
	for {
		line, err := reader.ReadString('\n') //一直读到分隔符,如果没有分隔符则err
		if err == io.EOF {
			break
		}
		if err != nil {
			fmt.Printf("reader.ReadString() failed, err:%v. ", err)
		}
		fmt.Print(line)
	}
}
func ReadByIoutil() { //ioutil库
	bytes, err := ioutil.ReadFile("in.txt") //读取文件所有数据
	if err != nil {
		fmt.Printf("ioutil.ReadFile() failed, err:%v. ", err)
	}
	fmt.Print(string(bytes))
}
func main() {
	// ReadByOs()
	// ReadByBufio()
	ReadByIoutil()
}

文件写入:

package main

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

func writeByOs() {
	f, err := os.OpenFile("./out.txt", os.O_CREATE|os.O_RDWR, 0644)
	if err != nil {
		fmt.Printf("os.OpenFile() failed, err:%v. ", err)
	}
	defer f.Close()
	f.Write([]byte("测试输出1\n"))
	f.WriteString("测试输出2\n")
}
func writeByBufio() {
	f, err := os.OpenFile("./out.txt", os.O_CREATE|os.O_RDWR, 0644)
	if err != nil {
		fmt.Printf("os.OpenFile() failed, err:%v. ", err)
	}
	defer f.Close()
	writer := bufio.NewWriter(f)
	writer.Write([]byte("测试输出1\n"))
	writer.WriteString("测试输出2\n")
	writer.Flush() //需要清空缓冲区
}
func writeByIoutil() {
	err := ioutil.WriteFile("./out.txt", []byte("测试输出1\n测试输出2\n"), 0666)
	if err != nil {
		fmt.Printf("ioutil.WriteFile() failed, err:%v. ", err)
	}
}
func main() {
	// writeByOs()
	// writeByBufio()
	writeByIoutil()
}

io.copy的使用


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值