golang_文件操作02: 读文件

版权声明:版权声明:本文为博主原创文章,转载请附上博文链接! https://blog.csdn.net/weixin_43851310/article/details/87823619

读文件

打开文件
​ f,err:=os.Open()
读文件
Read() 将文件的信息读取进一个[]byte切片
​ data := make([]byte, 100)
​ count, err := f.Read(data)

func main(){
	f,err:=os.Open("./1.txt")  
	if err!=nil{
		fmt.Println("err =",err)
		return
	}
	defer f.Close()

	data:=make([]byte,1024)
	count,err:=f.Read(data)
	if err!=nil && err==io.EOF{ //错误或者读取到末尾
		fmt.Println("err1 = ",err)
		return
	}
	fmt.Printf("read %d bytes: %q\n",count,data[:count])
}

Output :

read 23 bytes: "Golang\r\n春江花月夜"

逐行读取文本:

*func NewReader(rd io.Reader) Reader
NewReader创建一个具有默认大小缓冲、从r读取的*Reader。

*func (b Buffer) ReadBytes(delim byte) (line []byte, err error)
ReadBytes读取直到第一次遇到delim字节,返回一个包含已读取的数据和delim字节的切片

func main() {
	f, _ := os.Open("/1.txt")
	defer f.Close()

	rd := bufio.NewReader(f) //创建切片缓冲区
	for {
		buf, err := rd.ReadBytes('\n') //读取到\n结束
		fmt.Printf("1|%q|\n", string(buf))
		if err != nil {
			if err == io.EOF { //文件已经结束
				return
			}
			fmt.Println("err = ", err)
		}
		fmt.Printf("2|%q|\n", string(buf))
	}
}

Output :

1|"Golang\r\n"|
2|"Golang\r\n"|
1|"春江花月夜"|

注意:
1."春江花月夜"后面因为没有\n,打印输出应在判断之前执行

猜你喜欢

转载自blog.csdn.net/weixin_43851310/article/details/87823619