栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Golang——Create文件创建和写入(WriteString、Write、WriteAt)、OpenFile追加写入、Open读取文件、ReadBytes缓冲区读取

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Golang——Create文件创建和写入(WriteString、Write、WriteAt)、OpenFile追加写入、Open读取文件、ReadBytes缓冲区读取

Create创建文件:

os.Create:文件不存在则创建,文件存在则删除文件中的内容

语法:

file:创建文件的指针
err:创建文件出现异常后的信息

file, err := os.Create("创建文件存放的路径")

演示:

func CreateFile() {
	file, err := os.Create("/Users/itzhuzhu/Desktop/filetest/CreateFile")
	if err != nil {
		fmt.Println(err)
	}
	
	// 关流(不关流会长时间占用内存)
	defer file.Close()
}
写入数据:

使用WriteString写数据:

WriteString底层也是调用的Write,但是Write需要转换字节数组,比较麻烦,WriteString不需要手动转换,比较方便

func FileWriteString() {
	// 创建文件
	file, err := os.Create("/Users/itzhuzhu/Desktop/filetest/CreateFile")
	if err != nil {
		fmt.Println(err)
	}

	defer file.Close()

	// WriteString写数据,返回值参数1是写的字符长度,参数2是异常信息
	len, err := file.WriteString("WriteString写入的数据")
	if err != nil {
		fmt.Println(err)
	}
	fmt.Println(len)
}

使用Write写数据:

func FileWrite() {
	// 创建文件
	file, err := os.Create("/Users/itzhuzhu/Desktop/filetest/CreateFile")
	if err != nil {
		fmt.Println(err)
	}

	defer file.Close()

	// Write写数据,返回值参数1是写的字符长度,参数2是异常信息
	str := "Write写入的数据"
	len, err := file.Write([]byte(str)) //将字符串转换成字节切片
	if err != nil {
		fmt.Println(err)
	}
	fmt.Println(len)
}

使用WriteAt写数据:在指定的位置写入数据

func FileWriteAt() {
	// 创建文件
	file, err := os.Create("/Users/itzhuzhu/Desktop/filetest/CreateFile")
	if err != nil {
		fmt.Println(err)
	}

	defer file.Close()

	// WriteAt写数据,返回值参数1是写的字符长度,参数2是异常信息
	// WriteAt写数据,参数列表中参数1是要写的数据,参数2是要写入数据的开始索引
	var str string = "WriteAt写入的数据"
	num, _ := file.Seek(0, io.SeekEnd) //SeekEnd:将数据追加到源文件,参数一:追加数据的开始索引,
	fmt.Println("num:", num)
	len, err := file.WriteAt([]byte(str), num)
	if err != nil {
		fmt.Println(err)
	}
	fmt.Println(len)
}
OpenFile追加数据:

文件里已经有数据的情况下,用上面的三种方式去写,会出现覆盖的效果,WriteAt可以指定索引,但是比较麻烦。

os.OpenFile():打开指定文件进行操作

OpenFile有三个参数:参数1:打开文件的路径参数2:模式,常见的模式有

参数说明
O_RDONLY只读方式打开
O_WRONLY只写方式打开
O_RDWR读写方式打开
O_APPEND追加方式打开
O_CREATE不存在,则创建
O_EXCL如果文件存在,且标定了O_CREATE的话,则产生一个错误
O_TRUNG如果文件存在,且它成功地被打开为只写或读写方式,将其长度裁剪唯一(覆盖)
O_NOCTTY如果文件名代表一个终端设备,则不把该设备设为调用进程的控制设备
O_NONBLOCK如果文件名代表一个FIFO,或一个块设备,字符设备文件,则在以后的文件及I/O操作中置为非阻塞模式
O_SYNC当进行一系列写操作时,每次都要等待上次的I/O操作完成再进行

参数3:表示权限,取值范围(0-7),和linux里操作文件那个读写一样

0:没有任何权限
1:执行权限(如果是可执行文件,是可以运行的)
2:写权限
3:写权限与执行权限
4:读权限
5:读权限与执行权限
6:读权限与写权限
7:读权限,写权限,执行权限

演示:

func OpenFileTest() {
	// 追加写数据
	file, err := os.OpenFile("/Users/itzhuzhu/Desktop/filetest/OpenFileTest.txt", os.O_APPEND|os.O_WRONLY, 6)
	if err != nil {
		fmt.Println(err)
	}
	defer file.Close()

	// 通过文件指针读写数据
	len, err := file.WriteString("t我追加了吗")
	if err != nil {
		fmt.Println(err)
	}
	fmt.Println(len)
}
Open读取文件:

读取指定文件的数据

演示:

func OpenFileTest2() {
	// 追加写数据
	file, err := os.Open("/Users/itzhuzhu/Desktop/filetest/OpenFileTest.txt")
	if err != nil {
		fmt.Println(err)
	}
	defer file.Close()

	// 读数据,定义一个切片存储文件读取的数据
	buffer := make([]byte, 1024)
	len, err := file.Read(buffer)// len:读取文件中的数据长度
	if err != nil {
		fmt.Println(err)
	}
	fmt.Println(len)
	//fmt.Println(buffer) // 直接打印都是数字(ascii码值),长度是1024,数据没满的时候就会用默认值0代替,可以使用截取操作
	fmt.Println(buffer[:len])
	fmt.Println(string(buffer[:len])) // 将类型转换为string,可以展示出内容
}
ReadBytes缓冲区读取:

在使用ReadBytes( )函数读取数据时,需要用到缓冲区,所谓缓冲区就是存储数据的区域,也就是先将从文件中读取的数据存储在该区域内,然后在将区域中的数据取出来,写到磁盘上。

提供缓冲区的原因是:

为了缓和 CPU 与 磁盘设备之间速度不匹配矛盾。文件缓冲区是用以暂时存放读写期间的文件数据而在内存区预留的一定空间。

演示:

func ReadBytesTest() {
	// 追加写数据
	file, err := os.Open("/Users/itzhuzhu/Desktop/filetest/OpenFileTest.txt")
	if err != nil {
		fmt.Println(err)
	}
	defer file.Close()

	// 读数据,定义一个切片存储文件读取的数据
	r := bufio.NewReader(file)

	for {
		buf, err := r.ReadBytes('n')
		if err == io.EOF { // 文件末尾
			break
		}
		fmt.Println(err)
		fmt.Println("buf", string(buf))
	}
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/732375.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号