14.golang之读取文件操作应用实例

1)读取文件的内容并显示在终端(带缓冲区的方式),使用os.Open,filt.Close,bufio,NewReader(),reader.ReadString  函数和方法

package main
import (
	"fmt"
	"os"
	"io"
	"bufio"
)

func main() {
	// 打开文件
	// 概念说明:file 的叫法
	// 1. file 叫 file对象
	// 2. file 叫 file指针
	// 3. file 叫 file文件句柄
	file,err := os.Open("F:/go_file/test.txt")
	if err != nil {
		fmt.Println("open file err=",err)
	}
	// 当函数退出时,要及时的关闭file
	defer file.Close() // 要及时关闭file句柄,否则会有内存泄漏

	// 创建一个 *Reader, 是带缓冲的
	/*
	const (
		defaultBufSize = 4096 // 默认的缓冲区为4096
	)
	*/
	reader := bufio.NewReader(file)
	// 循环的读取文件的内容
	for {
		/*
		func (*Reader) ReadString ¶
		func (b *Reader) ReadString(delim byte) (line string, err error)
		ReadString读取直到第一次遇到delim字节,
		返回一个包含已读取的数据和delim字节的字符串。
		如果ReadString方法在读取到delim之前遇到了错误,
		它会返回在错误之前读取的数据以及该错误(一般是io.EOF)。
		当且仅当ReadString方法返回的切片不以delim结尾时,
		会返回一个非nil的错误。
		*/
		// 读到换行就结束一次
		str, err := reader.ReadString('\n') 
		if err == io.EOF { // io.EOF表示文件的末尾
			break
		}
		// 输出内容
		fmt.Print(str)
	}
	fmt.Println("文件读取结束...")
}

使用到的相关bufio介绍:

func NewReader (rd io.Reader) *Reader

NewReader创建一个具有默认大小缓冲、从r读取的*Reader

/*
    const (
        defaultBufSize = 4096 // 默认的缓冲区为4096
    )
*/

func (b *Reader) ReadString(delim byte) (line string, err error)

ReadString读取直到第一次遇到delim字节,返回一个包含已读取的数据和delim字节的字符串。如果ReadString方法在读取到delim之前遇到了错误,它会返回在错误之前读取的数据以及该错误(一般是io.EOF)。当且仅当ReadString方法返回的切片不以delim结尾时,会返回一个非nil的错误。

2 )读取文件的内容并显示在终端(使用ioutil一次将整个文件读入到内存中),这种方式适用于文件不大的情况。相关方法和函数(ioutil.ReadFile)

代码演示:

package main
import (
	"fmt"
	"io/ioutil"
)

func main() {
	// 使用 ioutil.ReadFile一次性将文件读取到位
	file := "F:/go_file/test.txt"
	content, err := ioutil.ReadFile(file)
	if err != nil {
		fmt.Printf("read file err=%v\n",err)
	}
	// 把读取到的内容显示到终端
	fmt.Printf("%v",content) // []byte切片
    fmt.Printf("%v",string(content))
}

使用到的包:

 使用ReadFile,没有显示的Open文件,也没有显示的Close文件,再ReadFile内部实现了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值