go学习———文件操作(打开、关闭、读取)

文件的打开关闭和读取

  • 一、标准设备
    • 1. 标准输出设备 屏幕
    • 2. 标准输入设备 键盘
    • 3.实例演示
  • 二、文件打开与关闭
  • 三、文件读取
    • 直接读取内容
    • 每次读取一行内容

一、标准设备

1. 标准输出设备 屏幕

往标准输出设备写内容

fmt.Println()

2. 标准输入设备 键盘

从标准输入设备读取内容

fmt.Scan()

3.实例演示

    import (
             "os"
             "fmt"
    )
	//标准设备 os.Stdout 默认为打开状态
	fmt.Println("sss")
	var a int
	fmt.Println("请输入a:")
	fmt.Scan(&a)
	fmt.Println(a)

	//往标准设备里写内容
	s.Stdout.WriteString("0000")

    //关闭标准设备
	os.Stdout.Close()
//运行结果
sss
请输入a:
7
7
0000
//如果先关闭标准设备
//运行结果为空

二、文件打开与关闭

  1. 新建一个文件,形参name为文件名称,返回值有两个,*file 和 错误
    如果文件本来存在,则会先清空原来内容然后再打开
func Create(name string) (*File, error)
  1. fmt.Sprintf 将传入内容组合为字符串,返回值为字符串
func Sprintf(format string, a ...interface{}) string
  1. 关闭文件
func (f *File) Close() error

	//打开并新建文件
	file, err := os.Create("./yuan.go")
	if err != nil {
		fmt.Println("err = ", err)
		return
	}

	//使用完毕,关闭文件
	defer file.Close()

	//往文件中写内容
	var buf string
	for i := 0; i < 10; i++ {
		//"i = i\n",这个字符串储存在buf中
		buf = fmt.Sprintf("i = %d\n", i)
		n, err := file.WriteString(buf)
		if err != nil {
			fmt.Println("err = ", err)
		}
		fmt.Println(n)
	}

//运行结果
//新建了一个文件
yuan.go
i = 0
i = 1
i = 2
i = 3
i = 4
i = 5
i = 6
i = 7
i = 8
i = 9

三、文件读取

直接读取内容

  1. 打开一个文件,形参name为文件名称,返回值有两个,*file 和 错误
func Open(name string) (*File, error)
  1. 用 *file.Read 来调用该方法,形参为切片类型,返回值n表示从文件读取内容的长度,err为错误
func (f *File) Read(b []byte) (n int, err error)
    //打开文件
	file,err := os.Open("./yuan.go")
	if err != nil {
		fmt.Println("err = ",err)
		return
	}
    //关闭文件
	defer file.Close()
    //读取文件内容
	buf := make([]byte,1024*2) //2k大小
	//n表示从文件读取内容的长度,buf为切片类型
	n,err1 := file.Read(buf)
	//文件出错同时没有到结尾
	if err1 != nil && err != io.EOF{
		fmt.Println("err = ",err)
		return
	}
	//buf为切片,要转化为字符串string()
	fmt.Printf("buf =%s ",string(buf[:n]))

每次读取一行内容

  1. NewReader创建一个具有默认大小缓冲、从r读取的*Reader。
func NewReader(rd io.Reader) *Reader
  1. ReadBytes读取直到第一次遇到delim字节,返回一个包含已读取的数据和delim字节的切片。如果ReadBytes方法在读取到delim之前遇到了错误,它会返回在错误之前读取的数据以及该错误(一般是io.EOF)。当且仅当ReadBytes方法返回的切片不以delim结尾时,会返回一个非nil的错误。
func (b *Reader) ReadBytes(delim byte) ([]byte, error)
    //打开文件
	file,err := os.Open("./yuan.go")
	if err != nil {
		fmt.Println("err = ",err)
		return
	}
	//关闭文件
	defer file.Close()

	//新建一个缓冲区,把内容先放在缓冲区
	r := bufio.NewReader(file)
	//重复循环
	for {
		//遇到'\n'结束读取,但是'\n'也能读进去
		buf,err := r.ReadBytes('\n') //此处要用单引号
		if err != nil{
			if err == io.EOF{
				//文件已经结束,结束循环,结束读取
				break
			}
			fmt.Println("err = ",err)
		}
		fmt.Printf("buf = ##%s##\n",string(buf))
	}

你可能感兴趣的:(Go,#,Go基础,golang,开发语言,后端)