文件操作
文件是什么?
计算机中的文件是存储再外部介质(通常是磁盘)上的数据集合,文件分为文本文件和二进制文件。
1. 打开和关闭文件
os.Open()
函数能够打开一个文件,返回一个*File
和一个err
。对得到的文件实例调用close()
方法能够关闭文件。
func main() {
//只读的方式打开当前目录下的demo.go
file,err:=os.Open("./demo.go")
if err !=nil{
fmt.Println("open file failed!,err:",err)
return
}
//延迟关闭
//不能将defer放在err判断之前:
//当err有值时,也就是说有错时,file就是nil,nil是不能调用Close()的,会出现panic的
defer file.Close()
}
为了防止文件忘记关闭,我们通常使用defer
延迟关闭语句。
2. 读取文件
(1).file.Read()
:
Read方法定义:func (f *File)Read(b []byte)(n int,err error)
它接收一个字节切片,返回读取的字节数和可能的具体错误。读到文件末尾时会返回0
和io.EOF
.
func main() {
//只读的方式打开当前目录下的demo.go
file, err := os.Open("./demo.go")
if err != nil {
fmt.Println("open file failed!,err:", err)
return
}
//延迟关闭
defer file.Close()
//使用Read方法读取数据
var tmp = make([]byte, 128) //指定读的长度
n, err := file.Read(tmp)
if err == io.EOF {
fmt.Println("文件读完了")
return
}
if err != nil {
fmt.Println("read file failed ,err:", err)
return
}
//如果文件内容大于128个字节,这时只会读取128个字节,如果小于128,就会将所有的字节数输出。
fmt.Printf("读取了%d个字节数据\n", n)//读取了128个字节数据
fmt.Println(string(tmp[:n]))//从开始到第128个字节打印出来