Go中的文件读写
在 Go 语言中,文件使用指向 os.File
类型的指针来表示的,也叫做文件句柄 。我们来看一下os包的使用方式。
1.读取文件
os包提供了两种打开文件的方法:
Open(name string) (*File, error)
func OpenFile(name string, flag int, perm FileMode) (*File, error)
第一个方法是以只读的方式去打开文件,如果文件不存在或者程序没有足够的权限打开这个文件,Open函数会返回错误;
第二个方法会自由一些,你可以设置打开文件的方式,以及文件的操作权限,后面我们详细说明。
package main
import (
"fmt"
"os"
)
func main() {
file, e := os.Open("c:/1.txt")
if e != nil {
fmt.Println(e)
}
buf := make([]byte,1024)
for {
len, _ := file.Read(buf)
if len == 0 {
break
}
fmt.Println(string(buf))
}
buf1 := make([]byte,1024)
offset := 0
for {
len1, _ := file.ReadAt(buf1, int64(offset))
offset = offset + len1
if len1 == 0 {
break
}
fmt.Println(string(buf1))
}
file.Close()
}
这是一个简单的打开文件读取数据的例子。
file.Read()
方法是直接将文件内容读取到指定大小的byte数组中,由源码可知如果byte数组大于1G,那么默认一次最大可以读取1G大小的数据。
file.ReadAt()
方法可以手动指定每次读取位置的偏移量。而不是默认设置。
我们再看OpenFile方法:
package main
import (
"fmt"
"os"
)
func main() {
//以读写方式打开文件,如果不存在,则创建
openFile, e := os.OpenFile("c:/1.txt", os.O_RDWR|os.O_CREATE, 777)
if e != nil {
fmt.Println(e)
}
buf := make([]byte,1024)
for {
len, _ := openFile.Read(buf)
if len == 0 {
break
}
fmt.Println(string(buf))
}
openFile.Close()
}
OpenFile函数的第二个参数是文件的打开模式:
const (
// Exactly one of O_RDONLY, O_WRONLY, or O_RDWR must be specified.
O_RDONLY int = syscall.O_RDONLY // 只读模式
O_WRONLY