0、前言

在大多数语言中对于文件操作是必不可少的一个内容,那么在Go中os提供了文件的基本操作,除此以外为了追求便捷以及性能之上,Go 还在io/ioutil以及bufio提供一些其他函数供开发者使用

1、文件读取

1.1、os.open文件读取

os.open打开文件后赋给file然后通过read的方法读取并接收一个buf []byte 的参数类型,读取到文件末尾会返回0以及 io.EOF,可以通过0或者io.EOF进行判断文件是否读取完毕。

package main

import (
"fmt"
"os"
) func main(){
fileObj,err := os.Open("./main.go")
if err != nil{
fmt.Printf("open file failed err: %v",err)
return
}
// 记得关闭文件
defer fileObj.Close()
// 使用Read方法读取文件数据
//var tmp = make([]byte,128) // 指定读的长度
var tmp [128]byte
n,err := fileObj.Read(tmp[:])
if err != nil{
fmt.Printf("read from file failed err: %v",err)
return
}
fmt.Printf("读了%d个字节\n",n)
fmt.Println(string(tmp[:n]))
}

1.2、os.open循环读取

上面这种方式是一次性读取128byte的文件,如果需要将文件都读取完,就需要用到循环读取

package main

import (
"fmt"
"os"
) func main(){
fileObj,err := os.Open("./main.go")
if err != nil{
fmt.Printf("open file failed err: %v",err)
return
}
defer fileObj.Close()
// 使用Read方法读取文件数据
var tmp [128]byte
for {
n,err := fileObj.Read(tmp[:])
if err != nil{
fmt.Printf("read from file failed err: %v",err)
return
}
fmt.Printf("读了%d个字节\n",n)
fmt.Println(string(tmp[:n]))
if n < 128 {
return
}
}
}

1.3、bufio文件读取

bufio 顾名思义就是带 buffer 的 IO

package main

import (
"bufio"
"fmt"
) func main(){
fileObj,err := os.Open("./main.go")
if err != nil{
fmt.Printf("open file failed err: %v",err)
return
}
defer fileObj.Close()
// 创建一个从文件中读内容的对象
reader := bufio.NewReader(fileObj)
line,err := reader.ReadString('\n') //注意是字符
if err == io.EOF {
return
}
if err != nil{
fmt.Printf("read line failed,err: %v",err)
return
}
fmt.Print(line)
}

1.4、bufio循环读取

package main

import (
"bufio"
"fmt"
) func main(){
fileObj,err := os.Open("./main.go")
if err != nil{
fmt.Printf("open file failed err: %v",err)
return
}
defer fileObj.Close()
// 创建一个从文件中读内容的对象
reader := bufio.NewReader(fileObj)
for {
line,err := reader.ReadString('\n') //注意是字符
if err == io.EOF {
return
}
if err != nil{
fmt.Printf("read line failed,err: %v",err)
return
}
fmt.Println(line)
}
}

1.5、ioutil读取整个文件

io/ioutil包的ReadFile方法能够读取完整的文件,只需要将文件名作为参数传入

package main

import (
"fmt"
"io/ioutil"
) func main(){
ret,err := ioutil.ReadFile("./main.go")
if err != nil {
fmt.Printf("read line failed,err: %v",err)
return
}
fmt.Println(string(ret))
}

2、文件写入

2.1、os.OpenFile文件写入

os.OpenFile()函数能够以指定模式打开文件,从而实现文件写入相关功能,它还提供了WriteString和Write两种方法,具体使用哪种根据个人需求。如下

func OpenFile(name string, flag int, perm FileMode) (*File, error) {
....
}

其中:

1.name:要打开的文件名

2.flag:打开文件的模式。模式有以下几种:

模式 描述
os.O_WRONLY 只写
os.O_CREATE 创建文件
os.O_RDONLY 只读
os.O_RDWR 读写
os.O_TRUNC 清空
os.O_APPEND 追加

3.perm:文件权限,一个八进制数,r(读) 04、w(写) 02、x (执行) 01

package main

import (
"fmt"
"os"
) func main(){
file,err := os.OpenFile("a.txt",os.O_CREATE|os.O_WRONLY|os.O_TRUNC,0644)
if err != nil{
fmt.Printf("open file failed err:%v",err)
return
}
defer file.Close()
str := "hello world\n"
file.Write([]byte(str)) // 写入字节切片数据
file.WriteString(str) // 直接写入字符串数据
}

2.2、bufio.NewWriter文件写入

bufio能够实现先将数据写入到缓存区,然后在从缓存中的内容写入到文件中。

package main

import (
"bufio"
"fmt"
"os"
) func main(){
file,err := os.OpenFile("a.txt",os.O_CREATE|os.O_WRONLY|os.O_TRUNC,0644)
if err != nil{
fmt.Printf("open file failed err:%v",err)
return
}
defer file.Close() writer := bufio.NewWriter(file)
str := "我的世界,由我做主\n"
writer.WriteString(str) // 先将数据写入到缓存
writer.Flush() // 将缓存中的内容写入文件中
}

2.3、ioutil.WriteFile文件写入

package main

import (
"fmt"
"io/ioutil"
) func main(){
str := "我的世界,你的世界\n"
err := ioutil.WriteFile("a.txt",[]byte(str),0666)
if err != nil {
fmt.Printf("open file failed err:%v",err)
return
}
}

Golang基础之文件操作的更多相关文章

  1. python基础篇(文件操作)

    Python基础篇(文件操作) 一.初始文件操作 使用python来读写文件是非常简单的操作. 我们使用open()函数来打开一个文件, 获取到文件句柄. 然后通过文件句柄就可以进行各种各样的操作了. ...

  2. golang中的文件操作

    一.文件的基本介绍 文件是数据源(保存数据的地方)的一种,比如经常使用的word文档,txt文件,excel文件都是文件.文件最主要的作用就是保存数据,它既可以保存一张图片,也可以保持视频,声音等等. ...

  3. Go语言基础之文件操作

    本文主要介绍了Go语言中文件读写的相关操作. 文件是什么? 计算机中的文件是存储在外部介质(通常是磁盘)上的数据集合,文件分为文本文件和二进制文件. 打开和关闭文件 os.Open()函数能够打开一个 ...

  4. GO学习-(16) Go语言基础之文件操作

    Go语言文件操作 本文主要介绍了Go语言中文件读写的相关操作. 文件是什么? 计算机中的文件是存储在外部介质(通常是磁盘)上的数据集合,文件分为文本文件和二进制文件. 打开和关闭文件 os.Open( ...

  5. python基础之文件操作

    对于文件操作中最简单的操作就是使用print函数将文件输出到屏幕中,但是这种操作并不能是文件保存到磁盘中去,如果下调用该数据还的重新输入等. 而在python中提供了必要的函数和方法进行默认情况下的文 ...

  6. python函数基础 与文件操作

    函数的定义 函数是通过赋值传递的,参数通过赋值传递给函数.def语句将创建一个函数对象并将其赋值给一个变量名,def语句的一般格式如下: def function_name(arg1,arg2[,.. ...

  7. git初体验(二)基础git文件操作

    文件操作续 忽略一些文件 只需在主目录下建立".gitignore"文件,注意新建的是文件而非文件夹,在win窗口中不能建立以.开头的文件,只能在dos下: E:\knowcars ...

  8. php基础知识--文件操作

    文件操作 文件 广义角度: 任何一个在磁盘上可以看到的符号(包含真正的文件及文件夹) 狭义角度: 真实存储数据的载体(不包含文件夹, 如doc文件,txt文件等) 文件操作: 对文件的增删改查 文件分 ...

  9. Day3 Python基础学习——文件操作、函数

    一.文件操作 1.对文件操作流程 打开文件,得到文件句柄并赋值给一个变量 通过文件句柄对文件进行操作 关闭文件 #打开文件,读写文件,关闭文件 http://www.cnblogs.com/linha ...

随机推荐

  1. Qt应用程序的打包

    Windows系统下打包: qt用realse版本编译然后打包发行 debug编译后的文件比realse版本大很多先在编译好的debug或者realse执行程序的目录下将执行该城西对应的所有dell文 ...

  2. 在Ubuntu_meta 16.04中设置默认Python3.5的命令

    ubuntu_meta 默认是安装了python2.7 和python3.5两个版本 查看ubuntu的python版本,默认版本是python2.7 输入:python 直接执行这两个命令即可: s ...

  3. System.getProperty() 获取系统变量

    例:获取用户当前的工作目录 String CONFPREFIXURL = System.getProperty("user.dir"); System.out.println(CO ...

  4. Binary Heap(二叉堆) - 堆排序

    这篇的主题主要是Heapsort(堆排序),下一篇ADT数据结构随笔再谈谈 - 优先队列(堆). 首先,我们先来了解一点与堆相关的东西.堆可以实现优先队列(Priority Queue),看到队列,我 ...

  5. Plastic Sprayer Supplier - Sprayer: How Can The Product Be Sprayed?

    In many end products, especially in cosmetics, the first thing that appeals to consumers is the form ...

  6. New Airless Pump Bottle Technical Features

    Airless Pump Bottle    protect sensitive products such as natural skin creams, serums, foundations a ...

  7. ubuntu13.10设置永久静态IP重启不失效

    步骤: 1.vi打开/etc/network/interfaces 2.手动添加static ip address 3.:wq保存退出 4.重启网络 service network-manager r ...

  8. 编写自己的JDBC框架

    目的 简化代码,提高开发效率 设计模式 策略设计模式 代码 #连接设置 driverClassName=com.mysql.jdbc.Driver url=jdbc:mysql://localhost ...

  9. centos上正式环境邮件发送失败问题

    用celery异步发送邮件的时候遇到一个问题: 能接收到任务,但是就是执行不了, 也不报错 发现可能是settIngs.py里设置的端口有问题, 现在设置的端口是25, 改成465, 并且把ssl打开 ...

  10. StringBuilder为什么线程不安全(面试必问)

    文章转载自:https://juejin.im/post/5d6228046fb9a06add4e37fe 作者:千山qianshan 1.引言 周五去面试又被面试的一个问题问哑巴了 面试官:Stri ...