go语言学习笔记十 文件处理

1.读取大文件

1.1 读取大文件
package main

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

func main() {
	// 基本使用
	// 打开文件 返回文件指针和错误信息
	file, err := os.Open("./test.txt")
	if err != nil {
		fmt.Printf("1.error:%v\n", err)
	}
	fmt.Printf("2.file:%v\n", file)
	// 关闭文件
	defer file.Close() // 函数结束后调用
	// 带缓存的读文件 适用于大文件
	reader := bufio.NewReader(file)
	for {
		str, err := reader.ReadString('\n') // 读到换行就结束
		if err == nil {
			fmt.Printf("3.str:%v\n", str)
		} else if err == io.EOF { // io.EOF 读到文件的末尾
			break
		} else {
			fmt.Printf("4.error:%v\n", err)
		}
	}

}

输出

2.file:&{0xc0000ae120}
3.str:hello world

3.str:go

3.str:python
1.2 读取小文件
package main

import (
	"fmt"
	"io/ioutil"
)

func main() {
	file := "./test.txt"
	// 读取大文件 ioutil.ReadFile 不需要open和close
	//文件的open和close已经封装到ReadFile中
	content, err := ioutil.ReadFile(file)
	if err != nil {
		fmt.Printf("1.error:%v\n", err)
	} else {
		fmt.Printf("2.content:%v\n", content)
		// 返回切片 []byte 输出内容需要转化为string
		fmt.Printf("3.content:%v\n", string(content))
	}

}

输出

2.content:[104 101 108 108 111 32 119 111 114 108 100 10 103 111 10 112 121 116 104 111 110 10]
3.content:hello world
go
python

2.写文件

package main

import (
	"fmt"
	"os"
	"bufio"
)

func main() {
	// 打开文件
	fileName := "./test.txt"
	file, err := os.OpenFile(fileName, os.O_WRONLY | os.O_CREATE,0666)
	if err != nil{

	}else{
		fmt.Printf("1.打开文件出错:%v\n", err)
	}
	// 定义写入的字符创
	str := "hello world\n"  // \n 换行否则会写入一行
	// 带缓存的写入 返回的是Writer 的指针
	writer := bufio.NewWriter(file)
	for i :=0; i<5;i++{
		count, err := writer.WriteString(str)
		fmt.Printf("count:%v err:%v\n", count, err)
	}
	// 调用WriteString方法是把内容写到缓存中
	// 必须调用Flush写入磁盘
	err2 := writer.Flush()
	fmt.Printf("err2:%v\n", err2)
	defer file.Close()  // 关闭文件
}

输出

1.打开文件出错:<nil>
count:12 err:<nil>
count:12 err:<nil>
count:12 err:<nil>
count:12 err:<nil>
count:12 err:<nil>
err2:<nil>
zhanglei@zhangleid

猜你喜欢

转载自blog.csdn.net/qq_38165374/article/details/105458218