golang基础教程(十五)文件操作_os

if e != nil{
	fmt.Println("文件打开失败!!")
}
e = file.Close()
if e != nil{
	fmt.Println("文件关闭失败!!")
}

}


##### 2、读文件操作


**1) bufio**



> 
> 读取文件的内容并显示在终端(带缓冲区的方式),使用 os.Open, file.Close, bufio.NewReader(), reader.ReadString 函数和方法.
> 
> 
> 



func main() {
//默认路径是从项目的根路径开始的
file, e := os.Open(“file/test.txt”)
if e != nil {
fmt.Println(“文件打开失败!!”)
}
//main方法结束时关闭文件
defer func() {
i := file.Close()
if i != nil {
fmt.Println(“文件关闭失败!!”)
}
}()
reader := bufio.NewReader(file)
for {
line, isPrefix, e := reader.ReadLine()
if e == io.EOF {
fmt.Println(“结束:”, e)
break
} else {
fmt.Println(isPrefix,string(line))
}
}
}


**说明:**  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190223111319727.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zNzkxMDQ1Mw==,size_16,color_FFFFFF,t_70)



reader := bufio.NewReader(file)
for{
str, e := reader.ReadString(‘\n’)
if len(str) == 0{
break
}
if e !=nil && e != io.EOF{
break
}
fmt.Println(str)
}


**说明:**  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190223111939679.png)


**2) ioutil**



> 
> 读取文件的内容并显示在终端(使用 ioutil 一次将整个文件读入到内存中),这种方式适用于文件  
>  不大的情况。相关方法和函数(ioutil.ReadFile)
> 
> 
> 



func main() {
//默认路径是从项目的根路径开始的
filePath := “file/test.txt”
bytes, e := ioutil.ReadFile(filePath)
if e!=nil{
fmt.Printf(“读取文件%v出错了\n”,filePath)
return
}
fmt.Println(string(bytes))
}


说明:  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190223112356572.png)


##### 3、写文件操作


**1)、基本介绍-os.OpenFile 函数**  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190223112708218.png)


* 第一个参数name:文件路径名称
* 第二个参数flag:文件打开的模式(可以组合)  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/2019022311332388.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zNzkxMDQ1Mw==,size_16,color_FFFFFF,t_70)
* 第三个参数perm:权限控制(系统)  
 权限取值范围:0~7  
 0:没有任何权限  
 1:执行权限()如果文件是可执行文件,是可以运行的  
 2:写权限  
 3:写权限和执行权限  
 4:读权限  
 5:读权限和执行权限  
 6:读权限和写权限  
 7:读权限、写权限和执行权限


一般选择6  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190223113252548.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zNzkxMDQ1Mw==,size_16,color_FFFFFF,t_70)  
 **2)、向里文件数据**


* 场景一  
 新建文件并写入数据



func main() {
//默认路径是从项目的根路径开始的
filePath := “file/test.txt”
//O_CREATE创建和O_EXCL存在报错 (保证文件是新建的)O_WRONLY(只写,为了后面将内容写入文件)
file, e := os.OpenFile(filePath, os.O_CREATE|os.O_EXCL|os.O_WRONLY, 0666)
defer func() {
if i := file.Close();i!=nil{
fmt.Println(“文件关闭失败!!”)
}
}()
if e!=nil{
fmt.Println(“文件创建失败!!”)
return
}
writer := bufio.NewWriter(file)
nn, e := writer.Write([]byte(“hello golang”))
if e !=nil{
fmt.Println(“内容写入缓冲区失败!!”)
return
}
e = writer.Flush()
if e !=nil{
fmt.Println(“内容刷入文件失败!!”)
return
}
fmt.Printf(“文件写入了%v字节数据”,nn)

}


* 场景二  
 覆盖上面写的内容



func main() {
//默认路径是从项目的根路径开始的
filePath := “file/test.txt”
file, e := os.OpenFile(filePath, os.O_WRONLY, 0666)
defer func() {
if i := file.Close();i!=nil{
fmt.Println(“文件关闭失败!!”)
}
}()
if e!=nil{
fmt.Println(“文件创建失败!!”)
return
}
writer := bufio.NewWriter(file)
nn, e := writer.Write([]byte(“hello world”))
if e !=nil{
fmt.Println(“内容写入缓冲区失败!!”)
return
}
e = writer.Flush()
if e !=nil{
fmt.Println(“内容刷入文件失败!!”)
return
}
fmt.Printf(“文件写入了%v字节数据”,nn)

}


注:文件内容变为



hello worldg


后面都了个g,其实是覆盖了前面11个字节第12个没有覆盖,应为hello world只有11个字节


* 场景三  
 向文件中追加内容(不覆盖原先的内容)



func main() {
//默认路径是从项目的根路径开始的
filePath := “file/test.txt”
file, e := os.OpenFile(filePath, os.O_WRONLY | os.O_APPEND, 0666)
defer func() {
if i := file.Close();i!=nil{
fmt.Println(“文件关闭失败!!”)
}
}()
if e!=nil{
fmt.Println(“文件创建失败!!”)
return
}
writer := bufio.NewWriter(file)
nn, e := writer.Write([]byte(“|||ABC||DEF”))
if e !=nil{
fmt.Println(“内容写入缓冲区失败!!”)
return
}
e = writer.Flush()
if e !=nil{
fmt.Println(“内容刷入文件失败!!”)
return
}
fmt.Printf(“文件写入了%v字节数据”,nn)

}


**3)ioutil**  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190223120154608.png)



func main() {
//默认路径是从项目的根路径开始的
filePath := “file/test.txt”
e := ioutil.WriteFile(filePath, []byte(“hello golang”), 0666)
if e!=nil{
fmt.Println(“写文件出错了”)
}
}


文件内容变为:hello golang


**4)文件其他操作**  
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190223121035607.png)


* 判断是否存在



func main() {
//默认路径是从项目的根路径开始的
filePath := “file/test.txt”
_, e := os.Stat(filePath)
if e==nil || os.IsExist(e) {
fmt.Printf(“%v exist !!\n”,filePath)
}
if os.IsNotExist(e) {
fmt.Printf(“%v not exist !!\n”,filePath)
}
}


* 删除文件



func main() {
//默认路径是从项目的根路径开始的
filePath := “file/test.txt”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值