golang中的文件操作
一、文件的基本介绍
文件是数据源(保存数据的地方)的一种,比如经常使用的word文档,txt文件,excel文件都是文件。文件最主要的作用就是保存数据,它既可以保存一张图片,也可以保持视频,声音等等。
1、输入流和输出流
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。2、os.File封装了所以文件相关操作,File是一个结构体
type File struct {
// 内含隐藏或非导出字段
}
File代表一个打开的文件对象。
func (f *File) Read(b []byte) (n int, err error)
Read方法从f中读取最多len(b)字节数据并写入b。它返回读取的字节数和可能遇到的任何错误。文件终止标志是读取0个字节且返回值err为io.EOF。
func (f *File) ReadAt(b []byte, off int64) (n int, err error)
ReadAt从指定的位置(相对于文件开始位置)读取len(b)字节数据并写入b。它返回读取的字节数和可能遇到的任何错误。当n<len(b)时,本方法总是会返回错误;如果是因为到达文件结尾,返回值err会是io.EOF。
func (f *File) Write(b []byte) (n int, err error)
Write向文件中写入len(b)字节数据。它返回写入的字节数和可能遇到的任何错误。如果返回值n!=len(b),本方法会返回一个非nil的错误。
func (f *File) WriteAt(b []byte, off int64) (n int, err error)
WriteAt在指定的位置(相对于文件开始位置)写入len(b)字节数据。它返回写入的字节数和可能遇到的任何错误。如果返回值n!=len(b),本方法会返回一个非nil的错误。
二、打开文件和关闭文件
func Open(name string) (file *File, err error)
Open打开一个文件用于读取。如果操作成功,返回的文件对象的方法可用于读取数据;对应的文件描述符具有O_RDONLY模式。如果出错,错误底层类型是*PathError。
func (f *File) Close() error
Close关闭文件f,使文件不能用于读写。它返回可能出现的错误。
package main import ( "fmt" "os" ) func main() { //打开文件 //file叫做对象、指针或者文件句柄 file, err := os.Open("/Users/test/Desktop/demo/ssh.txt") if err != nil { fmt.Println("open fiel err=", err) } fmt.Printf("file=%v,%T", *file, file) err = file.Close() if err != nil { fmt.Println("close file err=", err) } }
三、读写文件操作
读取文件的内容并显示在终端(带缓冲区的方式),使用os.Open,file.Close,bufio.NewReader(),reader.ReadString函数和方法
package main import ( "bufio" "fmt" "io" "os" ) func main() { //打开文件 //file叫做对象、指针或者文件句柄 file, err := os.Open("/Users/test/Desktop/demo/ssh.txt") if err != nil { fmt.Println("open fiel err=", err) } //当函数退出时,要及时关闭file,否则会有内存泄漏 defer file.Close() if err != nil { fmt.Println("close file err=", err) } // 创建一个 *Reader ,是带缓冲的 /* const ( defaultBufSize = 4096 //默认的缓冲区为 4096 ) */ reader := bufio.NewReader(file) //循环读取文件内容 for { str, err := reader.ReadString('\n') //读到一个换行就结束 if err == io.EOF { //io.EOF表示文件的末尾 break } //输出内容 fmt.Print(str) } fmt.Println("文件读取结束...") }
读取文件的内容并显示在终端(使用ioutil一次将整个文件读入到内存中),这种方式适用于文件不大的情况。相关方法和函数(ioutil.ReadFile)
func ReadFile(filename string) ([]byte, error)
ReadFile 从filename指定的文件中读取数据并返回文件的内容。成功的调用返回的err为nil而非EOF。因为本函数定义为读取整个文件,它不会将读取返回的EOF视为应报告的错误。
package main import ( "fmt" "io/ioutil" ) func main() { //使用ioutil.ReadFile一次性将文件读取到位 file := "/Users/bytedance/Desktop/bytedance/ssh.txt" content, err := ioutil.ReadFile(file) if err != nil { fmt.Printf("read file err=%v", err) } //把读取到的内容显示到终端 fmt.Printf("%v\n", content) //[]byte fmt.Printf("%v", string(content)) //没有显式的Open文件,也不需要显式Close文件 //文件的Open和Close被封装到ReadFile函数内部 }
