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语言中文件的操作:相关推荐

  1. C语言中文件的基本操作函数fprintf和fscanf实例介绍

    C语言文章更新目录 C/C++学习资源(百度云盘链接) 计算机二级资料(过级专用) C语言学习路线(从入门到实战) 编写C语言程序的7个步骤和编程机制 C语言基础-第一个C程序 C语言基础-简单程序分 ...

  2. C语言中文件定位函数总结

    C语言中文件定位函数主要是:fseek, ftell, fsetpos, fgetpos. 先来讲前两个函数,这是最基本的定位函数: fseek函数:能把文件指针移动到文件任何位置,其原型是:int ...

  3. python文件定位函数_C语言中文件定位函数总结

    C语言中文件定位函数主要是:fseek, ftell, fsetpos, fgetpos. 先来讲前两个函数,这是最基本的定位函数: fseek函数:能把文件指针移动到文件任何位置,其原型是:int ...

  4. c语言中 文件,c语言中文件的使用方法

    c语言中文件的使用方法 一.文件指针的定义 FILE *fp//注意FILE的大写 二.文件的打开 fp=fopen("(路径)文件名.文件格式后缀","文件的使用方法& ...

  5. c语言快速复数的比较大小,c语言中的复数操作

    c语言中的复数操作 发布时间:2020-06-17 14:23:06 来源:亿速云 阅读:391 作者:鸽子 复数在数学运算中十分重要,在编写数值运算或者算法的时候,我们会用到复数这种概念. 那么,复 ...

  6. 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种模式,如下图: 打开模式 ...

  7. vs2010c语言复数i怎么表示,学编程应该知道的c语言中的复数操作

    学编程应该知道的c语言中的复数操作 复数在数学运算中十分重要,在编写数值运算或者算法的时候,我们会用到复数这种概念. 那么,复数在C/C++语言中是如何表示的呢?我们接下来一一介绍. C语言中复数 在 ...

  8. C语言中文件的打开与保存

    C语言中文件的打开与保存 1.打开文件 /*打开文件,返回人数,将记录读入内存*/ int open() {int m=0;FILE *fp;if((fp=fopen("H:\\studen ...

  9. java中的文件_JAVA中文件的操作

    在java中,对文件(例如图片)进行操作,包括上传.修改.删除 一,文件上传 1.文件传到哪里,不仅可以保存在数据库中,也可以上传到远程服务器,文件保存的是文件的路径 2.文件上传都需要做什么?写那些 ...

  10. python36_第36 p,就这几个方法,Python中文件的操作

    大家好,我是杨数Tos,这是<从零基础到大神>系列课程的第X篇文章,第二阶段的课程:Python基础知识:Python中文件的操作(下篇). 学习本课程,建议先看一遍:[计算机基础知识]课 ...

最新文章

  1. 五行塔怎么吃第五个_红毛丹怎么吃 吃红毛丹的五个好处
  2. java opengl_java基于OpenGL ES实现渲染实例
  3. 大剑无锋之SpringBoot和Spring的区别
  4. (Redis设计与实现-6) 频道的订阅与退订
  5. 数字图像处理——2D降噪
  6. 中英文标点符号切换的组合键_易混标点符号:一字线(—)、短横线(-)、浪纹线(~)...
  7. 《阿里巴巴Android开发手册》正式发布,献给移动开发者的新年礼物
  8. 网易数据运河系统NDC设计与应用
  9. 关于list遍历时sychronizedList方法和synchronized同步块的线程安全问题思考
  10. Android N 去电流程,【私人备忘录】Android P 去电代码流程
  11. RePlugin 主程序接入指南
  12. Python随机梯度下降法(一)
  13. java小程序(万年历)
  14. 安卓手机型号修改工具(修改软件)使用方法跟步骤
  15. kudu tablet的设计
  16. vue项目PC端字体大小自适应
  17. 金山词霸2009牛津版下载地址
  18. 形式语言与自动机 Part.1绪论, Part.2 语言与文法
  19. android文件恢复功能,安卓手机恢复删除文件,如何恢复
  20. 画一手好的架构图是码农进阶的开始

热门文章

  1. springboot 使用spring security
  2. JBoss环境搭建及部署Web项目
  3. AVAudioRecorder(ios7)
  4. maya绝招(1-20)
  5. Tab,回车/换行组合符
  6. [转载] Discrete Mathematics——04 一阶谓词逻辑基本概念
  7. 【OpenCV】图像变换(五)-仿射变换和透视变换
  8. 智能优化算法:野狗优化算法 - 附代码
  9. 排序算法专题-插入排序
  10. 基于Snap软件将2A哨兵数据转换为ENVI格式