[TOC] # 相关api ## 建立和打开文件 新建文件可以通过如下两个方法 ~~~ func Create(name string) (file *File, err Error) 根据提供的文件名创建新的文件,返回一个文件对象,默认权限是0666的文件,返回的文件对象是可读写的 func NewFile(fd uintptr, name string) *File 根据文件描述符创建相应的文件,返回一个文件对象 ~~~ 通过如下的两个方法打开文件 ~~~ func Open(name string) (file *File, err Error) 该方法打开一个名称为name的文件,但是是只读方式,内部实现其实调用了OpenFile func OpenFile(name string, flag int, perm uint32) (file *File, err Error) 打开名称为name的文件,flag是打开的方式,只读,读写等,perm是权限 ~~~ ## 写文件 ~~~ func (file *File) Write(b []byte) (n int, err Error) 写入byte类型的信息到文件 ~~~ ~~~ func (file *File) WriteAt(b []byte, off int64) (n int, err Error) 在指定位置开始写入byte类型的信息 func (file *File) WriteString(s string) (ret int, err Error) 写入string信息到文件 ~~~ ## 读文件 ~~~ func (file *File) Read(b []byte) (n int, err Error) 读取数据到b中 func (file *File) ReadAt(b []byte, off int64) (n int, err Error) 从off开始读取数据到b中 ~~~ ## 删除文件 ~~~ func Remove(name string) Error 调用该函数就可以删除文件名为name的文件 ~~~ # 例子 ## 标准输出设备 ~~~ func main() { //os.Stdout.Close() //关闭后,无法输出 fmt.Println("ok?") //标准设备文件(os.Stdout) os.Stdout.WriteString("are you ok?\n") //os.Stdin.Close() //关闭后无法输入 var a int fmt.Println("请输入a: ") fmt.Scan(&a) fmt.Println("a = ", a) } ~~~ ## WriteString使用 写文件 ~~~ func WriteFile(path string) { //打开文件,新建文件 f, err := os.Create(path) if err != nil { fmt.Println("err = ", err) return } //使用完毕,需要关闭文件 defer f.Close() var buf string for i := 0; i < 10; i++ { buf = fmt.Sprintf("i = %d\n", i) n, err := f.WriteString(buf) if err != nil { fmt.Println(err) } fmt.Println(n) } } func main() { path := "./demo.txt" WriteFile(path) } ~~~ ## Read使用 读取 ~~~ func ReadFile(path string) { //打开文件,新建文件 f, err := os.Open(path) if err != nil { fmt.Println("err = ", err) return } //使用完毕,需要关闭文件 defer f.Close() buf := make([]byte, 1024*2) //2k大小 //n代表从文件读取内容的长度 n, err := f.Read(buf) //文件出错同时不是结尾的时候出错 if err != nil && err != io.EOF{ fmt.Println(err) return } //切片取最大 fmt.Println(string(buf[:n])) } func main() { path := "./demo.txt" ReadFile(path) } ~~~