Golang基础——文件操作

文件操作

func main() {
    // 创建文件
	// 创建文件会清空已存在的文件
	// 创建文件,文件路径,路径1:\\ 2:直接 / 即可
	f, err := os.Create("./users/aaa.txt")
    
	if err != nil {
		// 文件路径不存在
		// 文件无操作权限
		// 程序打开文件上限
		fmt.Println(err)
		return
	} else {
        // 如果 \n 不会换行:windows换行为:\r\n
        
        // 写入字符串
		f.WriteString("gogogo\n")
		f.WriteString("11111\n")
        
        // 写入切片
		s := []byte{'1', '2', 'h'}
		c, err := f.Write(s)
		if err == nil {
			fmt.Println(c)
		}
        
        
		// l, err := f.Seek(0, os.SEEK_END)  // 获取文件大小
		l, err := f.Seek(0, io.SeekEnd) // 获取文件大小
		fmt.Println(l)
		fmt.Println(err)
        
        // 写入指定位置的切片
		f.WriteAt([]byte("123LINWANG"), l) // 在l位置开始,写入文件
		f.WriteAt([]byte("aaaaaaa"), 0)    // 覆盖原来的,包括换行符
		f.WriteAt([]byte("fdjdkfd"), 100)  // 中间会有间隙,可以运行
		defer func() {
			fmt.Println("文件关闭了") // 整个main函数执行结束才执行
		}() // 关闭文件
	}
	f.Close()
    
    
	// 打开文件
    // 只读方式打开
	fo,erro := os.Open("./users/aaa.txt")
    // 可读写,打开方式,权限 0-7
    fp, errp := os.OpenFile("./users/aaa.txt", os.O_RDWR, 6)
	
    if errp == nil {
		fp.WriteString("zzzzzzzzz")
	}
	fp.Close()
	fpp, errpp := os.Open("./users/aaa.txt")
	fmt.Println(errpp)
    
	a := make([]byte, 10)
	res, _ := fpp.Read(a) // 返回内容 长度,err
	// At end of file, Read returns 0, io.EOF.
	// 读取到文件末尾,返回:0, io.EOF

	fmt.Println(string(a[:res])) // 读取到了切片中
	fpp.Close()

	// 按行读取
    // 文件缓冲区:磁盘存储速度比cpu速度慢,要有缓冲区。存取预存,缓冲区更快。
	fppp, _ := os.Open("./users/aaa.txt")
	r := bufio.NewReader(fppp) // 创建文件缓冲区

	for {
		rr, errrr := r.ReadBytes('\n') // 返回读取的内容和err,以换行符作为一行的结尾
		fmt.Println("-------------------")
		fmt.Println(string(rr))
		if errrr != nil { // 最后一行的时候:errrr为:EOF
			fmt.Println(errrr)
			break
		}
		fmt.Println("-------------------")
	}
	fppp.Close()
}
posted @ 2021-04-20 23:14  pythoner_wl  阅读(55)  评论(0编辑  收藏  举报