go语言中文件的操作:
go语言中文件的操作:
文件函数涉及到了文件I/O ,而对文件的操作我们除了打开(创建),关闭外,更主要的是对内容的读写操作上
一.文件的打开关闭主要办法
os包中不同函数打开(创建)文件的操作,最终还是通过函数OpenFile()来实现,而OpenFile()由编译器根据系统的情况来选择不同的底层功能来实现
func Open(name string) (*File, error) {return OpenFile(name, O_RDONLY, 0)
}
func Create(name string) (*File, error) {return OpenFile(name, O_RDWR|O_CREATE|O_TRUNC, 0666)
}
func OpenFile(name string, flag int, perm FileMode) (*File, error) {testlog.Open(name)return openFileNolog(name, flag, perm)
}
文件的打开以及创建方式:
os.Open(name string) 使用只读模式打开文件;
os.Create(name string) 创建新文件,如文件存在则原文件内容会丢失;
os.OpenFile(name string, flag int, perm FileMode) 这个函数可以指定flag和FileMode 。这三个函数都会返回一个文件对象。
关于os.OpenFile“中的flag的说明
O_RDONLY int = syscall.O_RDONLY // 只读打开文件和os.Open()同义
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/O方式打开文件,直接写入硬盘
O_TRUNC int = syscall.O_TRUNC // 如果可以的话,当打开文件时先清空文件
对文件的操作还有三个函数
在ioutil包中,也可以对文件操作,主要有下面三个函数func ReadFile(filename string) ([]byte, error) // f, err := os.Open(filename)
func WriteFile(filename string, data []byte, perm os.FileMode) error //os.OpenFile
func ReadDir(dirname string) ([]os.FileInfo, error) // f, err := os.Open(dirname)
文件函数涉及到了文件I/O ,而对文件的操作我们除了打开(创建),关闭外,更主要的是对内容的读写操作上
二.文件的打开关闭主要办读写操作
Go 语言中,为了方便开发者使用,将 I/O 操作封装在了大概如下几个包中:io 为 I/O 原语(I/O primitives)提供基本的接口
io/ioutil 封装一些实用的 I/O 函数
fmt 实现格式化 I/O,类似 C 语言中的 printf 和 scanf ,后面会详细讲解
bufio 实现带缓冲I/O在 io 包中最重要的是两个接口:Reader 和 Writer 接口。这两个接口是我们了解整个I/O的关键,我们只要记住:实现了这两个接口,就有了 I/O 的功能。有关缓冲:内核中的缓冲:无论进程是否提供缓冲,内核都是提供缓冲的,系统对磁盘的读写都会提供一个缓冲(内核高速缓冲),将数据写入到块缓冲进行排队,当块缓冲达到一定的量时,才把数据写入磁盘。进程中的缓冲:是指对输入输出流进行了改进,提供了一个流缓冲,当调用一个函数向磁盘写数据时,先把数据写入缓冲区,当达到某个条件,如流缓冲满了,或刷新流缓冲,这时候才会把数据一次送往内核提供的块缓冲中,再经块缓冲写入磁盘。
示例代码:
来源网络:,文件的读取内容, bufio读同一文件耗费时间最少
package mainimport ("bufio""fmt""io""io/ioutil""os""time"
)func read1(path string) {fi, err := os.Open(path)if err != nil {panic(err)}defer fi.Close()buf := make([]byte, 1024)for {n, err := fi.Read(buf)if err != nil && err != io.EOF {panic(err)}if 0 == n {break}}
}func read2(path string) {fi, err := os.Open(path)if err != nil {panic(err)}defer fi.Close()r := bufio.NewReader(fi)buf := make([]byte, 1024)for {n, err := r.Read(buf)if err != nil && err != io.EOF {panic(err)}if 0 == n {break}}
}func read3(path string) {fi, err := os.Open(path)if err != nil {panic(err)}defer fi.Close()_, err = ioutil.ReadAll(fi)
}func main() {file := "" //找一个大的文件,如日志文件start := time.Now()read1(file)t1 := time.Now()fmt.Printf("Cost time %v\n", t1.Sub(start))read2(file)t2 := time.Now()fmt.Printf("Cost time %v\n", t2.Sub(t1))read3(file)t3 := time.Now()fmt.Printf("Cost time %v\n", t3.Sub(t2))
}
ioutil包
读文件,写文件
func ioutilab(){fileobj,_:=os.Open("./labs.txt")defer fileobj.Close()contents,_:=ioutil.ReadAll(fileobj) //读文件fmt.Println(string(contents))////contents,_=ioutil.ReadFile("./labs.txt")//fmt.Println(contents)ioutil.WriteFile("./new.txt",contents,0666) //写文件}
bufio包:
读文件,写文件
bufio 包通过 bufio.NewReader 和bufio.NewWriter 来创建I/O方法集,利用缓冲来处理流
func bufinolab(){fileobj,_:=os.OpenFile("./labs.txt",os.O_RDWR|os.O_CREATE,0666)defer fileobj.Close()rd:=bufio.NewReader(fileobj)count,_:=rd.ReadSlice('#')fmt.Println(string(count))Wr := bufio.NewWriter(fileobj)Wr.WriteString("WriteString writes a ## string.")Wr.Flush()}
go语言中文件的操作:相关推荐
- C语言中文件的基本操作函数fprintf和fscanf实例介绍
C语言文章更新目录 C/C++学习资源(百度云盘链接) 计算机二级资料(过级专用) C语言学习路线(从入门到实战) 编写C语言程序的7个步骤和编程机制 C语言基础-第一个C程序 C语言基础-简单程序分 ...
- C语言中文件定位函数总结
C语言中文件定位函数主要是:fseek, ftell, fsetpos, fgetpos. 先来讲前两个函数,这是最基本的定位函数: fseek函数:能把文件指针移动到文件任何位置,其原型是:int ...
- python文件定位函数_C语言中文件定位函数总结
C语言中文件定位函数主要是:fseek, ftell, fsetpos, fgetpos. 先来讲前两个函数,这是最基本的定位函数: fseek函数:能把文件指针移动到文件任何位置,其原型是:int ...
- c语言中 文件,c语言中文件的使用方法
c语言中文件的使用方法 一.文件指针的定义 FILE *fp//注意FILE的大写 二.文件的打开 fp=fopen("(路径)文件名.文件格式后缀","文件的使用方法& ...
- c语言快速复数的比较大小,c语言中的复数操作
c语言中的复数操作 发布时间:2020-06-17 14:23:06 来源:亿速云 阅读:391 作者:鸽子 复数在数学运算中十分重要,在编写数值运算或者算法的时候,我们会用到复数这种概念. 那么,复 ...
- C语言中文件打开模式(r/w/a/r+/w+/a+/rb/wb/ab/rb+/wb+/ab+)浅析
C语言中文件打开模式(r/w/a/r+/w+/a+/rb/wb/ab/rb+/wb+/ab+)浅析 C语言文件打开模式浅析 在C语言的文件操作语法中,打开文件文件有以下12种模式,如下图: 打开模式 ...
- vs2010c语言复数i怎么表示,学编程应该知道的c语言中的复数操作
学编程应该知道的c语言中的复数操作 复数在数学运算中十分重要,在编写数值运算或者算法的时候,我们会用到复数这种概念. 那么,复数在C/C++语言中是如何表示的呢?我们接下来一一介绍. C语言中复数 在 ...
- C语言中文件的打开与保存
C语言中文件的打开与保存 1.打开文件 /*打开文件,返回人数,将记录读入内存*/ int open() {int m=0;FILE *fp;if((fp=fopen("H:\\studen ...
- java中的文件_JAVA中文件的操作
在java中,对文件(例如图片)进行操作,包括上传.修改.删除 一,文件上传 1.文件传到哪里,不仅可以保存在数据库中,也可以上传到远程服务器,文件保存的是文件的路径 2.文件上传都需要做什么?写那些 ...
- python36_第36 p,就这几个方法,Python中文件的操作
大家好,我是杨数Tos,这是<从零基础到大神>系列课程的第X篇文章,第二阶段的课程:Python基础知识:Python中文件的操作(下篇). 学习本课程,建议先看一遍:[计算机基础知识]课 ...
最新文章
- 五行塔怎么吃第五个_红毛丹怎么吃 吃红毛丹的五个好处
- java opengl_java基于OpenGL ES实现渲染实例
- 大剑无锋之SpringBoot和Spring的区别
- (Redis设计与实现-6) 频道的订阅与退订
- 数字图像处理——2D降噪
- 中英文标点符号切换的组合键_易混标点符号:一字线(—)、短横线(-)、浪纹线(~)...
- 《阿里巴巴Android开发手册》正式发布,献给移动开发者的新年礼物
- 网易数据运河系统NDC设计与应用
- 关于list遍历时sychronizedList方法和synchronized同步块的线程安全问题思考
- Android N 去电流程,【私人备忘录】Android P 去电代码流程
- RePlugin 主程序接入指南
- Python随机梯度下降法(一)
- java小程序(万年历)
- 安卓手机型号修改工具(修改软件)使用方法跟步骤
- kudu tablet的设计
- vue项目PC端字体大小自适应
- 金山词霸2009牛津版下载地址
- 形式语言与自动机 Part.1绪论, Part.2 语言与文法
- android文件恢复功能,安卓手机恢复删除文件,如何恢复
- 画一手好的架构图是码农进阶的开始