1.file类是在os包中,封装了底层的文件描述符和相关信息,同时封装了Read和Write的实现;
2.文件信息通过一个接口来实现:FileInfo;如何操作这个接口的方法呢:os.Stat获取fileinfo的返回值
type FileInfo interface {
Name() string // base name of the file 文件名. 扩展名
Size() int64 // 文件大小
Mode() FileMode // 文件权限
ModTime() time.Time // 修改时间
IsDir() bool // 是否是文件
Sys() interface{} // 基础数据源接口(can return nil)
}
fileinfo, err := os.Stat("E:/GoPath/src/a/aa.txt")
if err != nil {
fmt.Println("err: ", err)
}
fmt.Printf("%T\n",fileinfo)
//文件名
fmt.Println(fileinfo.Name())
//大小
fmt.Println(fileinfo.Size())
//是否是目录
fmt.Println(fileinfo.IsDir())
//修改时间
fmt.Println(fileinfo.ModTime())
//权限
fmt.Println(fileinfo.Mode())
3文件操作
fileName1 := "E:/GoPath/src/a/aa.txt"
//路径:是否是绝对路径
fmt.Println(filepath.IsAbs(fileName1))
//绝对路径
fmt.Println(filepath.Abs(fileName1))
//上级路径
fmt.Println(path.Join(fileName1,".."))
//Mkdir只能创建一层目录
err := os.Mkdir("E:/GoPath/src/b", os.ModePerm)
if err != nil {
fmt.Println("err: ", err)
return
}
fmt.Println("创建b目录成功")
//MkdirAll能创建多层
err := os.MkdirAll("E:/GoPath/src/a/cc/dd/ee", os.ModePerm)
if err != nil {
fmt.Println("err: ", err)
return
}
fmt.Println("多层目录创建成功")
//创建文件: create采用模式06666(任何人可读写,不可执行),已存在的文件会截断(内容清空),不存在则新建
file1, err := os.Create("E:/GoPath/src/a/ab.txt")
if err != nil {
fmt.Println("err: ", err)
}
fmt.Println(file1)
//文件权限
const (
// Exactly one of O_RDONLY, O_WRONLY, or O_RDWR must be specified.
O_RDONLY int = syscall.O_RDONLY // open the file read-only.
O_WRONLY int = syscall.O_WRONLY // open the file write-only.
O_RDWR int = syscall.O_RDWR // open the file read-write.
// The remaining values may be or'ed in to control behavior.
O_APPEND int = syscall.O_APPEND // append data to the file when writing.
O_CREATE int = syscall.O_CREAT // create a new file if none exists.
O_EXCL int = syscall.O_EXCL // used with O_CREATE, file must not exist.
O_SYNC int = syscall.O_SYNC // open for synchronous I/O.
O_TRUNC int = syscall.O_TRUNC // truncate regular writable file when opened.
)
//只读
file3, err := os.Open("E:/GoPath/src/a/ab.txt")
if err != nil {
fmt.Println("err: ", err)
}
fmt.Println(file3)
//指定权限: (文件名称,文件的打开方式,文件的的权限:打开的文件如果不存在,so需要指定权限)
file4, err := os.OpenFile("E:/GoPath/src/a/ab.txt", os.O_RDONLY|os.O_WRONLY, os.ModePerm)
if err != nil {
fmt.Println("err: ", err)
}
fmt.Println(file4)
- 关闭文件:文件名称.Close()
- 删除文件或文件夹
err := os.Remove("E:/GoPath/src/a/aa.txt")
if err != nil {
fmt.Println("err: ", err)
return
}
fmt.Println("删除文件成功")
//强制删除,所有
err := os.RemoveAll("E:/GoPath/src/a/cc/dd")
if err != nil {
fmt.Println("err: ", err)
return
}
fmt.Println("删除多层文件夹成功")