go语言文件(基础)

读取文件的三种方法

package main

import (
	"fmt"
	"os"
)

func main() {
	fileobj, err := os.Open("E:\\goproject\\src\\gocode\\code1\\xx.txt") //打开一个文件只读,./代表同目录下的文件
	if err != nil {
		fmt.Printf("open file failed ,err:%v\n", err)
		return
	}
	//读取文件内容
	defer fileobj.Close()       //defer的作用是程序即将退出时才进行关闭文件
	var tem = make([]byte, 128) //读取时要使用切片 所以进行了创建,一次性只能读128个,想要读完,就必须采用循环的读法
	n, err := fileobj.Read(tem) //n为文件中的字节数 err为错误
	if err != nil {
		fmt.Printf("read file failed ,err:%v\n", err)
		return
	}
	fmt.Printf("read %d bytes from file.\n", n)
	fmt.Println(string(tem))
}

循环读入

package main

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

func ReadAll() {
	fileobj, err := os.Open("E:\\goproject\\src\\gocode\\code1\\xx.txt") //打开一个文件只读,./代表同目录下的文件
	if err != nil {
		fmt.Printf("open file failed ,err:%v\n", err)
		return
	}
	//读取文件内容
	defer fileobj.Close()
	for {
		var tem = make([]byte, 128) //每次读128个字节的数据
		n, err := fileobj.Read(tem)
		if err == io.EOF { // end of file
			//把当前读了多少个字节数据打印出来,然后退出
			fmt.Println(string(tem[:n]))
			return
		}
		if err != nil {
			fmt.Printf("read file failed ,err:%v\n", err)
			return
		}
		fmt.Printf("read %d bytes from file.\n", n)
		fmt.Println(string(tem[:n]))
	}
}
func main() {
	ReadAll()
}

 使用bufio读取文件

// read by bufio
func ReadBufio() {
	fileobj, err := os.Open("E:\\goproject\\src\\gocode\\code1\\xx.txt") //打开一个文件只读,./代表同目录下的文件
	if err != nil {
		fmt.Printf("open file failed ,err:%v\n", err)
		return
	}
	//读取文件内容
	defer fileobj.Close()
	reader := bufio.NewReader(fileobj) //传入文件对象
	for {
		line, err := reader.ReadString('\n') //read什么返回什么
		if err == io.EOF {
			fmt.Print(line)
			return
		}
		if err != nil {
			fmt.Printf("read file by bufio failed,err:%v\n", err)
		}
		fmt.Print(line)
	}
}

 使用os读取原为outil中

// 使用os读取
func reados() {
	file, err := os.ReadFile("E:\\goproject\\src\\gocode\\code1\\xx.txt")
	if err != nil {
		fmt.Printf("read by os failed ,err:%v\n", err)
		return
	}
	fmt.Println(string(file)) //强制转化为string类型,原本为字节类型
}

ps。这种方法无法读取内存过大的文件

整体代码:

package main

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

// 只读一次
func ReadOnly() {
	fileobj, err := os.Open("E:\\goproject\\src\\gocode\\code1\\xx.txt") //打开一个文件只读,./代表同目录下的文件
	if err != nil {
		fmt.Printf("open file failed ,err:%v\n", err)
		return
	}
	//读取文件内容
	defer fileobj.Close()
	var tem = make([]byte, 128) //每次读128个字节的数据
	n, err := fileobj.Read(tem)

	if err != nil {
		fmt.Printf("read file failed ,err:%v\n", err)
		return
	}
	fmt.Printf("read %d bytes from file.\n", n)
	fmt.Println(string(tem[:n]))
}

func ReadAll() {
	fileobj, err := os.Open("E:\\goproject\\src\\gocode\\code1\\xx.txt") //打开一个文件只读,./代表同目录下的文件
	if err != nil {
		fmt.Printf("open file failed ,err:%v\n", err)
		return
	}
	//读取文件内容
	defer fileobj.Close()
	for {
		var tem = make([]byte, 128) //每次读128个字节的数据
		n, err := fileobj.Read(tem)
		if err == io.EOF { // end of file
			//把当前读了多少个字节数据打印出来,然后退出
			fmt.Println(string(tem[:n]))
			return
		}
		if err != nil {
			fmt.Printf("read file failed ,err:%v\n", err)
			return
		}
		fmt.Printf("read %d bytes from file.\n", n)
		fmt.Println(string(tem[:n]))
	}
}

// read by bufio
func ReadBufio() {
	fileobj, err := os.Open("E:\\goproject\\src\\gocode\\code1\\xx.txt") //打开一个文件只读,./代表同目录下的文件
	if err != nil {
		fmt.Printf("open file failed ,err:%v\n", err)
		return
	}
	//读取文件内容
	defer fileobj.Close()
	reader := bufio.NewReader(fileobj) //传入文件对象
	for {
		line, err := reader.ReadString('\n') //read什么返回什么
		if err == io.EOF {
			fmt.Print(line)
			return
		}
		if err != nil {
			fmt.Printf("read file by bufio failed,err:%v\n", err)
		}
		fmt.Print(line)
	}
}

// 使用os读取
func reados() {
	file, err := os.ReadFile("E:\\goproject\\src\\gocode\\code1\\xx.txt")
	if err != nil {
		fmt.Printf("read by os failed ,err:%v\n", err)
		return
	}
	fmt.Println(string(file)) //强制转化为string类型,原本为字节类型
}
func main() {
	reados()
}

文件写入

想要文件写入,必须采用os.openfile

路径//写入方式:见下图//文件权限

// 写入
func Write() {
	fileobj, err := os.OpenFile("E:\\goproject\\src\\gocode\\code1\\xx.txt", os.O_CREATE|os.O_WRONLY|os.O_TRUNC, 0644) //所有要进行写入的操作都写到这段话中
	if err != nil {
		fmt.Printf("open file failed,err:%v\n", err)
		return
	}
	defer fileobj.Close()
	str := "帅比lzy"
	fileobj.Write([]byte(str))
	fileobj.WriteString("aloha")
}
func writebybufio() {
	fileobj, err := os.OpenFile("E:\\goproject\\src\\gocode\\code1\\xx.txt", os.O_CREATE|os.O_WRONLY|os.O_TRUNC, 0644) //所有要进行写入的操作都写到这段话中
	if err != nil {
		fmt.Printf("open file failed,err:%v\n", err)
		return
	}
	defer fileobj.Close()
	writer := bufio.NewWriter(fileobj)
	writer.WriteString("genshen impact start")
	writer.Flush() //将缓冲区的内容写入,十分必要的语句
}
func writebyos() {
	str := "yeyeyeyey!"
	err := os.WriteFile("E:\\goproject\\src\\gocode\\code1\\xx.txt", []byte(str), 0644)
	if err != nil {
		fmt.Printf("write file failed,err:%v\n", err)
		return
	}
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值