龙行博客

走路看风景,经历看人生,岁月留痕迹,人生留轨迹,17的历史,18的豪情,时间的匆忙,人生的风景,放开心胸往前走,成功再远行,放开理想往前走,梦想再行动。
现在位置:首页 > 编程语言 > Golang > go语言文件创建读写操作笔记

go语言文件创建读写操作笔记

龙行    Golang    2019-5-12    31    0评论    本文已被百度收录点击查看详情
package main

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

func main(){

	//新建文件
	fp,err := os.Create("a.txt")
	if err!=nil{
		//常见错误
		/*
		1.路劲不存在
		2.文件权限问题
		3.程序打开文件上线
		*/
		fmt.Println("文件创建失败")
		return
	}

	//打开文件
	//fp.err := os.Open("a.txt")  这种方式只能只读

	/*

	os.Open  只能只读方式打开
	os.OpenFile(打开文件路劲,打开方式,打开权限(0-7))
	O_RDONLY(只读模式)
	O_WEONLY(只写模式) 
	O_RDWR(可读可写模式) 
	O_APPEND(追加模式)
	
	0 : 没有任何权限
	1 : 执行权限(如果是可执行文件,是可以运行的)
	2 : 写权限
	3 : 写权限与执行权限
	4 : 读权限
	5 : 读权限与执行权限
	6 : 读权限与写权限
	7 : 读,写,执行
	*/
	fp,err := os.OpenFile("a.txt",os.O_RDWR,6)
	if err != nil {
		fmt.Println("打开文件失败")
	}

	fp.WriteString("hello")
	fp.WriteAt([]byte("哼哼哈嘿",25))

	/**
	写入文件
	**/

	// ---第一种方式
	// windows换行 \r\n   
	// linux 黄行 \n
	//fp.WriteString("hello world\r\n")
	//fp.WriteString("性格荷官在线发牌")

	// ====第二种方式切片方式
	// sliceee := []byte{'h','e','l','l','o'}
	// count,err := fp.Write(sliceee)  //必须是字符切片
	// if err != nil {
	// 	fmt.Println("写入文件失败")
	// 	return
	// } else {
	// 	fmt.Println(count)
	// }

	// ===========第三种方式 获取光标位置
	//获取文件起始位置到结束位置有多少个字符
	//count,_ := fp.Seek(0.io.SEEK_END)  逐渐被遗弃
	count,_ := fp.Seek(0,io.SeekEnd)
	fmt.Println(count) //count返回光标在文本里面的位置
	//指定位置写入
	fp.WriteAt([]byte("hello world"),count)  //在光标位置写入hello world
	fp.WriteAt([]byte("haha"),0)
	fp.WriteAt([]byte("皮仔"),25)

	/*
	读取文件内容
	 Read
	*/
	fp,err := os.Open("a.txt")
	if err != nil {
		fmt.Println("打开文件失败")
	}
	//将文件内容读取出来放在切片中
	buf := make([]byte,1024 * 2)
	// n,_ := fp,Read(buf)
	// fmt.Println(string(buf[:n])

	for {
		n,err := fp.Read(buf)  //读取放入buf切片中
		//io.EOF文件的末尾
		//读取到文件的末尾 返回值 errors.New("EOF")
		if err == io.EOF{
			break;
		}
		fmt.Println(string(buf[:n]))
	}

	//上面是全部读取出来放在切片中,我们也可以每次只读去一行

	//创建缓冲区读取内容
	r := bufio.NewReader(fp)
	//第一种for循环
	for {
		//遇到\n结束读取 但是\n也读取进入
		buf,err1 := r.ReadBytes('\n')
		fmt.Println(string(buf))
		if err1 != nil {
			if err1 == io.EOF{
				break
			}
			fmt.Println(err1)
		}
		
	}
	//第二种for循环
	for {
		str,err2 := r.ReadString('\n')
		fmt.Println(str)
		if err2 == io.EOF {
			break
		}
	}


	/*
	关闭文件
	如果打开文件不关闭,会造成内存浪费,程序打开文件上限
	*/
	//fp.Close()
	//可以延迟调用
	defer fp.Close()



}
评论一下 分享本文 赞助站长

赞助站长X

扫码赞助站长
联系站长
龙行博客
  • 版权申明:此文如未标注转载均为本站原创,自由转载请表明出处《龙行博客》。
  • 本文网址:https://www.liaotaoo.cn/217.html
  • 上篇文章:go语言操作文件实例笔记
  • 下篇文章:thinkphp5使用QueryList实现采集功能
  • go
挤眼 亲亲 咆哮 开心 想想 可怜 糗大了 委屈 哈哈 小声点 右哼哼 左哼哼 疑问 坏笑 赚钱啦 悲伤 耍酷 勾引 厉害 握手 耶 嘻嘻 害羞 鼓掌 馋嘴 抓狂 抱抱 围观 威武 给力
提交评论

清空信息
关闭评论
快捷导航
联系博主
在线壁纸
给我留言
光羽影视
音乐欣赏
返回顶部