概述
1.打开与关闭文件
1.文件操作使用os
包。
2.os.Open()
函数打开文件,返回一个*File
与一个err
。
3.使用close()
方法能够关闭文件,为了防止忘记关闭文件,通常与defer
一起使用。
package main
import (
"fmt"
"os"
)
func main() {
file, err := os.Open("./main.go") // 返回文件句柄与错误信息
defer file.Close()
if err != nil {
fmt.Println(err)
} else {
fmt.Println(file) // 返回的是*file
}
}
2.读取文件
2.1 file.Read()
2.1.1 基本使用
我们先看一下Read()
方法的精简源码
func (f *File) Read(b []byte) (n int,err error)
Read 方法传入一个类型为[]byte
的参数,返回返回一个int
类型的n,与error
的err。
实现基本读取文件的思路:
调用os.Open()
方法,将文件路径传给Open
,返回文件句柄与报错信息(如果没有报错就为nil),定义一个类型为[]type
的变量tmp
(这个变量很重要,读取到文件信息就保存在里面),文件句柄调用Read()
方法传入变量tmp
,返回读取的字节数与报错信息。
func fileRead(){
// 只读的方式打开文件
file,err := os.Open("文件路径")// 返回文件句柄与报错信息
if err != nil{
fmt.Printf("open file failed : %v n",err)
}
defer file.close()
// 使用Read方法读取文件内容
var tmp := make([]byte,527) // 将tmp传给Read方法,tmp中保存了读出来的内容
n,err := file.Read(tmp) // n 表示读取的字节数
if err == io.EOF {
fmt.Println("文件读取完成")
return
}
if err != nil {
fmt.Println("file read faild:",err)
return
}
// 将tmp转化为字符串格式
fmt.Println(string(tmp[:n]))
}
2.1.2 循环读取文件内容
使用for
的死循环
func fileRead() {
// 只读的方式打开文件
file, err := os.Open("文件路径") // 返回文件句柄与报错信息
if err != nil {
fmt.Printf("open file failed : %v n", err)
}
defer file.Close()
var content []byte //content 存储文件中的所有数据
var tmp = make([]byte, 206) // 将tmp传给Read方法,tmp中保存了读出来的内容
for {
// 使用Read方法读取文件内容
n, err := file.Read(tmp) // n 表示读取的字节数
if err == io.EOF {
fmt.Println("文件读取完成")
break
}
if err != nil {
fmt.Println("file read faild:", err)
return
}
content = append(content, tmp[:n]...)
}
fmt.Println(string(content))
}
2.2 bufio 读取文件(一行一行读)
func main() {
file, err := os.Open("../text")
if err != nil {
fmt.Println("file open err", err)
return
}
defer file.Close()
// 调用bufio的NewReader方法返回reader对象
reader := bufio.NewReader(file)
for {
line, err := reader.ReadString('n')
if err == io.EOF {
if len(line) != 0 {
fmt.Println(line)
}
fmt.Println("文件读取完成!")
break
}
if err != nil {
fmt.Println("read file failed", err)
return
}
fmt.Print(line)
}
}
2.3 ioutil 读取整个文件
ioutil包下的Readfile
方法能够读取整个完整的文件。
package main
import (
"fmt"
"io/ioutil"
)
func main() {
content, err := ioutil.ReadFile("../text")
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(content))
}
3.文件写入操作
指定文件打开这模式,然后对文件进行相应操作
使用op.OpenFile()
方法操作文件
func OpenFile(name string,flag int,perm FileMode)(*file,error){...}
name
文件路径 flag
打开文件的模式
模式 | 含义 |
---|---|
os.O_WRONLY | 只写 |
os.O_CREATE | 创建文件 |
os.O_RDONLY | 只读 |
os.O_RDWR | 读写 |
os.O_TRUNC | 清空 |
os.O_APPEND | 追加 |
3.1 Write与WriteString
Write:写入字节切片数据
WriteString:直接写入字符串数据
package main
import (
"fmt"
"os"
)
func main() {
file, err := os.OpenFile("./txt", os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0777)
defer file.Close()
if err != nil {
fmt.Println(err)
}
content := "荆轲刺秦王2"
file.Write([]byte(content))//写入字节切片数据
file.WriteString(content)// 写入字符串数据
}
3.2 bufio.NewWriter
先将数据写入缓存,再将数据写进磁盘
func main() {
file, err := os.OpenFile("./txt2", os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0777)
if err != nil {
fmt.Println(err)
}
writer := bufio.NewWriter(file)
writer.WriteString("我闪!")
writer.Flush()
}
3.3 ioutil.WriteFile
func main() {
str := "hello 沙河"
err := ioutil.WriteFile("./xx.txt", []byte(str), 0666)
if err != nil {
fmt.Println("write file failed, err:", err)
return
}
}
最后
以上就是精明洋葱为你收集整理的14.Go语言干货-文件操作的全部内容,希望文章能够帮你解决14.Go语言干货-文件操作所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复