Golang基础之文件操作
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基础之文件操作的更多相关文章
- python基础篇(文件操作)
Python基础篇(文件操作) 一.初始文件操作 使用python来读写文件是非常简单的操作. 我们使用open()函数来打开一个文件, 获取到文件句柄. 然后通过文件句柄就可以进行各种各样的操作了. ...
- golang中的文件操作
一.文件的基本介绍 文件是数据源(保存数据的地方)的一种,比如经常使用的word文档,txt文件,excel文件都是文件.文件最主要的作用就是保存数据,它既可以保存一张图片,也可以保持视频,声音等等. ...
- Go语言基础之文件操作
本文主要介绍了Go语言中文件读写的相关操作. 文件是什么? 计算机中的文件是存储在外部介质(通常是磁盘)上的数据集合,文件分为文本文件和二进制文件. 打开和关闭文件 os.Open()函数能够打开一个 ...
- GO学习-(16) Go语言基础之文件操作
Go语言文件操作 本文主要介绍了Go语言中文件读写的相关操作. 文件是什么? 计算机中的文件是存储在外部介质(通常是磁盘)上的数据集合,文件分为文本文件和二进制文件. 打开和关闭文件 os.Open( ...
- python基础之文件操作
对于文件操作中最简单的操作就是使用print函数将文件输出到屏幕中,但是这种操作并不能是文件保存到磁盘中去,如果下调用该数据还的重新输入等. 而在python中提供了必要的函数和方法进行默认情况下的文 ...
- python函数基础 与文件操作
函数的定义 函数是通过赋值传递的,参数通过赋值传递给函数.def语句将创建一个函数对象并将其赋值给一个变量名,def语句的一般格式如下: def function_name(arg1,arg2[,.. ...
- git初体验(二)基础git文件操作
文件操作续 忽略一些文件 只需在主目录下建立".gitignore"文件,注意新建的是文件而非文件夹,在win窗口中不能建立以.开头的文件,只能在dos下: E:\knowcars ...
- php基础知识--文件操作
文件操作 文件 广义角度: 任何一个在磁盘上可以看到的符号(包含真正的文件及文件夹) 狭义角度: 真实存储数据的载体(不包含文件夹, 如doc文件,txt文件等) 文件操作: 对文件的增删改查 文件分 ...
- Day3 Python基础学习——文件操作、函数
一.文件操作 1.对文件操作流程 打开文件,得到文件句柄并赋值给一个变量 通过文件句柄对文件进行操作 关闭文件 #打开文件,读写文件,关闭文件 http://www.cnblogs.com/linha ...
随机推荐
- ModBus的小于3.5S间隔的理解
modbus协议中规定:至少3.5个字符传输时间的停顿间隔时间标志了消息的结束. 我的理解如下:约定参数:9600bps,8数据位,无奇偶校验,1起始位,1停止位. 9600bps代表在9600的波特 ...
- 这里是常见的HTTP状态码
遇到过的HTTP状态码 200(Ok):请求成功,服务器成功返回网页. 403(Forbidden):服务器已经理解请求,但是拒绝执行它. 404(Not Found):请求失败,请求所希望得到的资源 ...
- java模板字符串功能的简单实现
package com.Interface.util; import lombok.extern.slf4j.Slf4j; /** * 测试类 * * @author 华文 * @date 2019年 ...
- 转专业后补修C语言的一些体会(4)
1.对于文件的打开和关闭操作:首先了解到,C语言将文件分成了两种类型:文本文件和二进制文件.针对这两种文件,各有不同的文件读写方式.在C语言中,文件的操作要借助一个文件指针 即FILE 类型,定义了一 ...
- 启动named服务报错!
安装及配置bind服务程序: yum -y install bind 三个关键文件: 主配置文件(/etc/named.conf) 区域配置文件(/etc/named.rfc1912.zones) 数 ...
- Python 基础之压缩模块zipfile与tarfile
一.压缩模块 zipfile (1)创建一个zip压缩包 import zipfile #zip_deflated 代表是压缩的意思#打开压缩包zf = zipfile.ZipFile("c ...
- 2.1 MySQL基础使用
本文是课上资料的总结非原创没有转载地址 目录 引言 为什么需要数据库? 数据库和应用程序的关系 MySQL基础使用 一.数据库简介 1.1 简介 1.2 常见数据库管理系统 1.3 MySQL卸载 1 ...
- 金币(0)<P2015_1>
金币 (coin.cpp/c/pas) [问题描述] 国王将金币作为工资,发放给忠诚的骑士.第一天,骑士收到一枚金币:之后两天(第二天和第三天),每天收到两枚金币:之后三天(第四.五.六天),每天收 ...
- 关于阿里云ecs服务器无法用FTP进行连接问题
背景 前两天趁机老马又搞优惠,就又撸了一台三年的ecs来折腾,后来整了半天发现ftp怎么都连接不上,以前也是撸过阿里的服务器,不过启动盘是巨硬家的系统, 最后发现虽然服务器的防火墙关了,但是老马为了安 ...
- GO 回调实现
函数作为参数传递,实现回调. package main import "fmt" // 声明一个函数类型 type cb func(int) int func main() { t ...