设备文件:
屏幕(标准输出设备) fmt.Println()
往标准输出设备写内容
键盘(标准输入设备) fmt.Scan()
从标准输入设备读取内容
磁盘文件,放在存储设备上的文件
文本文件:以记事本打开,能看到内容(不是乱码)
二进制文件:以记事本打开,能看到内容:(是乱码)
为什么需要文件?内存掉电丢失,程序结束,内存中的内容消失,文件放磁盘,程序结束,文件还是存在。
建立与打开文件
新建文件有两种方法:
create
func Create (name string) (file *File,err Error)
根据提供的文件名创建新的文件,返回一个文件对象,默认权限是0666的文件,返回的文件象是可读写的。如果文件存在,它会清空文件。
NewFile
func NewFile (fd uintptr,name string) *File
根据文件描述符创建相应的文件,返回一个文件对象
打开文件有两种方法
Open
func Open (name string) (file *File,err Error)
该方法打开一个名称为 name 的文件,但是是只读方式,内部实现其实调用了 OpenFile
OpenFile
func OpenFile (name string,flag int,perm uint32) (file *File,err Error)
打开名称为 name 的文件,flag 是打开的方式,只读、读写等,perm是权限。不论是Create还是Open最终都会调用OpenFile
写文件
Write
func (file *File) Write(b []byte) (n int,err Error)
写入 byte 类型的信息到文件,以切片的方式,可以处理二进制或者非二进制
WriteAt
func (file *File) WriteAt(b []byte,off int64) (n int,err Error)
从指定位置开始写入 byte 类型的信息到文件
WriteString
func (file *File) WriteString(s string) (ret int,err Error)
写入string类型的信息到文件
读文件
Read
func (file *File) Read(b []byte) (n int,err Error)
读取数据到b中
ReadAt
func (file *File) ReadAt(b []byte,off int64) (n int,err Error)
从指定位置off开始读取数据到b中
删除文件
Remove
func Remove(name string) Error
调用该函数就可以删除文件名为name的文件
标准设备文件,默认打开,用户可以直接使用
可以调用os.Stdout.Close()
将输出设备关闭
os.Stdout.Close()
将其关闭后将无法输出
可以调用os.Stdin.Close()
将输入设备关闭
- 关闭后无法输入
实现写文件
- 创建一个文件Create
- 写数据WriteString
- 关闭文件,defer在函数结束之前关闭文件Close
实现读文件
- 打开文件Open
- 读文件Read按指定的大小来读
- 关闭文件Close
一行一行读
buf, err := r.ReadBytes('\n')
代表着遇到’\n’结束读取,但是\n也会读取进去
实现拷贝文件
package mainimport ("fmt""io""os"
)func main() {list := os.Argsif len(list) != 3 {fmt.Println("usage:xxx srcFile dstTile")return}srcFileName := list[1]dstFileName := list[2]if srcFileName == dstFileName {fmt.Println("源文件和目的文件不能相同")return}//只读方式打开sF, err1 := os.Open(srcFileName)if err1 != nil {fmt.Println("err1=", err1)return}//新建目的文件dF, err2 := os.Create(dstFileName)if err2 != nil {fmt.Println("err2=", err2)return}defer sF.Close()defer dF.Close()buf := make([]byte, 4*1024)for {n, err := sF.Read(buf)if err != nil {if err == io.EOF {//文件结束break}fmt.Println("err=", err)}//往目的文件写 读多少写多少dF.Write(buf[:n])}}