go实现文件的创建、删除与读取示例代码
作者:w85278161 发布时间:2023-06-17 05:10:50
标签:go,文件,创建
文件目录的创建和删除
package main
import(
"fmt"
"os"
)
func main(){
//创建目录和权限
os.Mkdir("./benben",0777)
//创建多级目录和设置权限
os.MkdirAll("./benben/test",0777)
//删除目录
err:=os.Remove("./benben")
if err!=nil{
fmt.Println(err)
}
//删除多级目录
os.RemoveAll("./benben")
}
文件的创建
package main
import (
"os"
"fmt"
)
func main(){
//文件的创建,Create会根据传入的文件名创建文件,默认权限是0666
file,err:=os.Create("a.txt")
if err!=nil{
fmt.Println(err)
}
defer file.Close()
}
文件的打开和关闭
文件的打开和关闭相关函数在文件的读取和写入示例中演示。
文件的读取和写入
文件的读取有以下几种方式:
方法一: 利用 os.Open() 和 ioutil.ReadAll() 两个方法
package main
func main(){
//打开文件
file,err:=os.Open("a.txt")
if err !=nil {
fmt.Println(err)
}
//文件的关闭
defer file.Close()
//文件读取方式一,通过os.Open返回一个文件句柄,然后利用它进行读取
body,err:=ioutil.ReadAll(file)
if err !=nil {
fmt.Println(err)
}
fmt.Println(string(body))
}
方法二:利用 ioutil.ReadFile() 方法来实现读取操作。
package main
func main(){
body,err:=ioutil.ReadFile("a.txt")
if err!=nil {
fmt.Println(err)
}
fmt.Println(string(body))
}
ReadFile函数直接将方式一中的三个步骤分装在了一起,下面是实现的具体代码。
func ReadFile(filename string)([]byte,error){
//打开文件
f,err:=os.Open(filename)
if err!=nil {
return nil,err
}
//延迟关闭文件
defer f.Close()
//设置读取文件的字节数
var n int64
//Stat()方法会返回描述指定文件的信息结构FileInfo
if fi,err:=f.Stat();err==nil{
if size:=fi.Size();size<1e9{
n=size
}
}
//返回读取的文件内容
return readAll(f,n+bytes.MinRead)
}
FileInfo具有以下方法:
Name() string //返回文件名
Size() int64 //返回文件的字节长度
Mode() FileMode //文件模式位
ModTime() time.Time //修改时间
IsDir() bool //是否是目录
Sys() interface{} //底层数据源
方法三: 带缓存的读取
package main
func main(){
file,err:=os.Open("a.txt")
if err!=nil {
fmt.Println(err)
}
defer file.Close()
//创建一个新的io.Reader,它实现了Read方法
reader:=bufio.NewReader(file)
//设置读取的长度
buf:=make([]byte,1024)
//读取文件
_,err=reader.Read(buf)
if err!=nil {
fmt.Println(err)
}
fmt.Println(string(buf))
}
文件的写入
方法一: 利用ioutil. Write File()
package main
import (
"io/ioutil"
)
func main(){
content:=[]byte("Go is an open source programming language that makes is easy to build simple,reliable,and efficient software)
err:=ioutil.WriteFile("a.txt",content,0777)
if err!=nil {
fmt.Println(err)
}
fmt.Println("write file successful")
}
看看WriteFile具体是如何实现文件的写入的。
func WriteFile(filename string,data []byte,perm os.FileMode) error{
//打开文件
f,err:=os.OpenFile(filename,os.O_WRONLY|os.O_CREATE|os.O_TRUNC,perm)
if err!=nil {
return err
}
//文件的写入
n,err:=f.Write(data)
if err==nil && n<len(data){
err=io.ErrShortWrite
}
//关闭文件
if err1:=f.Close();err==nil{
err=err1
}
return err
}
方法二:打开文件,然后利用Write()进行文件读写, 注意 :此时不能用os.Open()打开,而要用os.OpenFile()打开。 os.Open()和os.OpenFile()两者区别
package main
func main(){
file,err:=os.OpenFile("a.txt",os.O_RDWR|os.O_CREATE,0777)
if err!=nil {
fmt.Println(err)
}
defer file.Close()
content:=[]byte("Go is an open source programing language that makes it easy to build simple,reliable,and efficient software")
_,err=file.Write(content)
if err!=nil {
fmt.Println(err)
}
fmt.Println("write file successful")
}
方法三:通过有缓冲操作的bufio提供的包进行操作
如果使用Write方法实现写操作,此时就还需要使用Flush()方法。 golang bufio包中的Write方法分析
package main
func main(){
file,err:=os.OpenFile("a.txt", os.O_CREATE|os.O_RDWR, 0666)
if err!=nil {
fmt.Println(err)
}
defer file.Close()
content:=[]byte("Go is an open source programing language that makes it easy to build simple,reliable,and efficient software")
//使用NewWriter方法返回的io.Writer缓冲默认大小为4096,也可以使用NewWriterSize方法设置缓存的大小
newWriter:=bufio.NewWriter(file)
//将文件写入缓存
if _,err =newWriter.Write(content);err!=nil {
fmt.Println(err)
}
//从缓存写入到文件中
if err= newWriter.Flush(); err!=nil {
fmt.Println(err)
}
fmt.Println("write file successful")
}
来源:https://studygolang.com/articles/18118


猜你喜欢
- 1、其中再语义分割比较常用的上采样:其实现方法为:def upconv2x2(in_channels, out_channels, mode
- dictPython内置了字典:dict的支持,dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)
- 前言Python中使用SSH需要用到OpenSSH,而OpenSSH依赖于paramiko模块,而paramiko模块又依赖于pycrypt
- 利用问题的普遍性和特殊性来求解,代码如下:import unittestfrom datetime import datetimeclass
- 1.项目开发流程2.项目需求说明模拟实现基于文本界面的《家庭记账软件》该软件能够记录家庭的收入,支出,并能够打印收支明细表3.项目的界面4.
- 本文要点:爬虫的基本流程requests模块的使用保存csv可视化分析展示环境介绍python 3.8pycharm 2021专业版 激活码
- 本文实例为大家分享了python实现最速下降法的具体代码,供大家参考,具体内容如下代码:from sympy import *import
- MySQL连接查询相信大家都有所了解,连接查询是在数据库查询操作的时候经常用到的,下面就为您介绍MySQL连接查询mysql连接
- 本文实例讲述了python实现自动登录人人网并采集信息的方法。分享给大家供大家参考。具体实现方法如下:#!/usr/bin/python#
- 毫无疑问,这个世界设计无处不在,优美的设计会得到会心的微笑和由衷的赞赏。然而,想从事设计或在设计边缘的人们未必有机会学习专业的设计。实际上,
- 在当今企业环境中,保证数据安全不是可有可无的工作。频繁曝光的入侵和欺骗事件、萨班斯•奥克斯利法案、HIPAA法案规定和爱国
- python3字符串操作 x = 'abc' y = 'defgh' print(x + y)
- 问题:MySQL 8.0 无法远程连接访问原因:可能是mysql数据库user表中,用户的 host 字段配置是不允许当前hos
- PHP PDO预定义常量以下常量由本扩展模块定义,因此只有在本扩展的模块被编译到PHP中,或者在运行时被动态加载后才有效。注意:PDO使用类
- mybatis分页插件pageHelper详解及简单实例工作的框架spring springmvc mybatis3首先使用分页插件必须先引
- 如果原来没有使用过正则表达式,那么可能对这个术语和概念会不太熟悉。不过,它们并不是您想象的那么新奇。请回想一下在硬盘上是如何查找文件的。您肯
- 在python中,命令行解析的很好用,首先导入命令行解析模块import argparseimport sys然后创建对象parse=arg
- Player.playState0 Undefined Windows Media Player is in an undefined st
- 代码如下import wordcloudimport jiebafont = r'C:\Windows\Fonts\simfang.
- 1 运行SQLPLUS工具 sqlplus 2 以OS的默认身份连接 / as sysdba 3 显示当前用户名 show user 4 直