go -- 文件操作(1)读与写
go – 文件操作(1)读与写
众所周知,文件是数据源(数据保存的地方),常见类型的文件大家其实都不陌生
很显然文件是以流的形式来操作的
//流:数据在文件和程序之间经历的路径//输入流:数据从文件到程序的路径//输出流:数据从程序到文件的路径
在打开和关闭文件,我们一般使用os模块下的函数,直接贴一段官方函数解释
一般是使用Open来调用一个文件,但是OpenFile可以制定一些参数
const (O_RDONLY int = syscall.O_RDONLY // 只读模式打开文件O_WRONLY int = syscall.O_WRONLY // 只写模式打开文件O_RDWR int = syscall.O_RDWR // 读写模式打开文件O_APPEND int = syscall.O_APPEND // 写操作时将数据附加到文件尾部O_CREATE int = syscall.O_CREAT // 如果不存在将创建一个新文件O_EXCL int = syscall.O_EXCL // 和O_CREATE配合使用,文件必须不存在O_SYNC int = syscall.O_SYNC // 打开文件用于同步I/OO_TRUNC int = syscall.O_TRUNC // 如果可能,打开时清空文件,也就是将文件覆盖
)
比如说flag就可以指定这一些,之后我们会举例的
关于读的操作
读的操作分为一次性读取和缓冲式读取
首先来介绍一下一次性读取,一次性读取并不需要os模块下的open,而是直接通过string读取文件的名字,并且返回一个[]byte类型,很显然这种方式并不适合大文件的读取,十分的占空间
package main
import ("fmt""io/ioutil"
)
func main(){file := "./test.txt" //读取当前目录下的一个文件content,err := ioutil.ReadFile(file)if err !=nil{fmt.Println("\n文件读取结束")}fmt.Printf("%v",string(content))}
接下来介绍一下缓冲式读取文件
缓冲式读取需要通过bufio这一个模块
package main
import ("fmt""os""bufio""io"
)
//---------------------------缓冲读取------------------------
func main(){file , err := os.Open("test.txt")if err != nil{fmt.Println("open file err=",err)}defer file.Close() //当函数退出时,要及时的关闭file,否则会有内存泄漏//创建一个 *Reader ,是带有缓冲的/*const(defaultBufSize = 4096 //默认缓冲区为4096 )这种方式一般用于读取大文件,分多次提取*/reader := bufio.NewReader(file)//循环的读取文件的内容for {str,err := reader.ReadString('\n')fmt.Print(str)if err == io.EOF{ //io.EOF表示文件的末尾fmt.Println("\n文件读取结束...")break}}
}
关于写的操作
写的操作如果是也是缓冲类型的话,那么同样也是需要先os来调用打开文件,指定写的权限操作,然后使用bufio模块进行写
const (O_RDONLY int = syscall.O_RDONLY // 只读模式打开文件O_WRONLY int = syscall.O_WRONLY // 只写模式打开文件O_RDWR int = syscall.O_RDWR // 读写模式打开文件O_APPEND int = syscall.O_APPEND // 写操作时将数据附加到文件尾部O_CREATE int = syscall.O_CREAT // 如果不存在将创建一个新文件O_EXCL int = syscall.O_EXCL // 和O_CREATE配合使用,文件必须不存在O_SYNC int = syscall.O_SYNC // 打开文件用于同步I/OO_TRUNC int = syscall.O_TRUNC // 如果可能,打开时清空文件,也就是将文件覆盖
)
package main
import("fmt""bufio""os"
)
func main(){f_path := "./abc.txt"file,err := os.OpenFile(f_path, os.O_WRONLY|os.O_CREATE, 0666) //这一类的参数查看官方文档,windows下0666没反应 if err != nil{fmt.Printf("open file err=%v\n",err)return}defer file.Close()str := "hello,duan\n" //在某些版本过低的系统,换行需要添加\r这样的符号来识别\n str := "hello,duan\r\n" ,至少在win10就不用添加这个write := bufio.NewWriter(file) //写入的时候其实是具有一个缓存的,需要使用一个Flush方法来将缓冲的数据真正写入文件,否则会丢失for i:=0;i<5;i++{write.WriteString(str)}write.Flush() //注意的是写了之后一定一定要Flush一下
}
er(file) //写入的时候其实是具有一个缓存的,需要使用一个Flush方法来将缓冲的数据真正写入文件,否则会丢失for i:=0;i<5;i++{write.WriteString(str)}write.Flush() //注意的是写了之后一定一定要Flush一下
}
go -- 文件操作(1)读与写相关推荐
- python中文件读写位置的作用-文件操作,读,写,指定位置
[python]代码库#文件操作 open() #open("路径 + 文件名","读写模式") f=open('filepath','w') #读写模式: # ...
- 集合、深浅拷贝、文件操作(读、写、追加)函数初识(参数)
小数据池 #int ==比较数值 is 比较内存地址 id 测试内存地址 #str 不能含有特俗字符 单个元素*数字,不能超过21 i1 = 'a'*20 i = 'a'*20 id一样 i1 = ' ...
- Python中文件操作(读、写、关闭)
目录 一.什么是文件 二.python文件操作 1.open()打开函数 注意 mode常用的三种基础访问模式 2.读操作相关方法 read()方法: readlines()方法: readline( ...
- java 边读边写文件_文件操作--边读边写,在指定位置添加内容(避免乱码)
[java]代码库/** * @param lineNumber 选择要添加内容的行数 * @param attribute1 选择要添加的内容1 * @param attribute2 选择要添加的 ...
- 对已有文件进行既读又写的操作时关于文件位置注意事项(适用于Python和C/C++)
当我们需要对现有文件进行读取数据并修改文件中的数据时,就需要用到对已有文件进行既读又写的操作.有多种可读且可写的文件打开方式:r+,w+,a+,rb+,wb+,ab+,具体含义见下表. 打开 方式 读 ...
- Python open()函数文件打开、读、写操作详解
python的文件读写和打开操作都有自己特定的函数和方法,操作起来很简单.下面就来简单的了解下python文件的基本操作方法有哪些. 一.Python open()函数文件打开操作 打开文件会用到op ...
- C++之文件操作探究(三):写文件——二进制文件
相关博文:C++之文件操作探究(一):写文件--文本文件 相关博文:C++之文件操作探究(二):读文件--文本文件 相关博文:C++之文件操作探究(三):写文件--二进制文件 相关博文:C++之文件操 ...
- C++之文件操作探究(一):写文件——文本文件
相关博文:C++之文件操作探究(一):写文件--文本文件 相关博文:C++之文件操作探究(二):读文件--文本文件 相关博文:C++之文件操作探究(三):写文件--二进制文件 相关博文:C++之文件操 ...
- jxl操作(读、写)Excel例子 http://www.360doc.com/content/11/0422/14/6728052_111517688.shtml
首 页 阅览室 馆友 我的图书馆 登录 注册 jxl操作(读.写)Excel例子 收藏人:澈丹 2011-04-22 | 阅: 转: | 分享 | 来源 jxl不错,简单易 ...
- matlab读int16读文件_Matlab文件操作及读txt文件(fopen,fseek,fread,fclose)
Matlab 文件操作及读 txt 文件 (fopen,fseek,fread,fclose) matlab 文件操作 文件操作是一种重要的输入输出方式,即从数据文件读取数据或将 结果写入数据文件. ...
最新文章
- ASP.NET MVC 3拥抱动态类型,徐汇区网站设计
- spark streaming 消费 kafka入门采坑解决过程
- STM32串口中断的4种接收数据的实现方式
- 【每周CV论文推荐】 初学深度学习人脸关键点检测必读文章
- 31.CSS3变形效果【下】
- 在Spark Scala/Java应用中调用Python脚本,会么?
- python清除缓存的命令_python怎么删除缓存文件
- linux c 串口可读可写,串口编程可写入不能读取 怎么解决
- Protobuf的C++使用笔记
- java形状函数_java基础:10.4 Java FX之形状
- 机器学习--k均值聚类(K-means)
- 问你觉得iOS7为什么要扁平化,扁平化和之前的比有什么优势
- AUTOCAD——圆弧命令
- bada开发tips
- Python 进阶视频课 - 12. Nelson-Siegel 构建债券收益率曲线
- 介绍几个ddos产品厂家
- 什么是云计算,云计算是什么意思
- java线程报时代码_什么?一个核同时执行两个线程?
- Go语言 linux下开发 IDE -SpaceVim\NeoVim
- 基于codesys开发的多轴运动控制程序框架,将逻辑与运动控制分离,将单轴控制封装成功能块,对该功能块的操作包含了所有的单轴控制