Go-25-文件管理
阅读原文时间:2023年07月09日阅读:3

FileInfo接口

package main

import (
"fmt"
"os"
)

// FileInfo 接口文件的信息包括文件名、文件大小、修改权限、修改时间等。

func main() {
filePath:="C:\\Users\\sixinshuier\\Desktop\\分布式训练\\分布式训练.txt"
fileInfo,err:=os.Stat(filePath)
if err!=nil{
fmt.Println(err)
}else {
fmt.Println("文件名:",fileInfo.Name())
fmt.Println("文件大小",fileInfo.Size())
fmt.Println("文件权限",fileInfo.Mode())
fmt.Println("是否是文件夹",fileInfo.IsDir())
fmt.Println("修改时间",fileInfo.ModTime())
}
}

输出

文件名: 分布式训练.txt
文件大小 0
文件权限 -rw-rw-rw-
是否是文件夹 false
修改时间 2020-05-28 16:46:51.7140497 +0800 CST

文件路径:

filepath.IsAbs() : 判断是否绝对路径

filepath.Rel(): 获取相对路径

filepath.Abs() :获取绝对路径

path.join(): 拼接路径

创建目录:

os.MKdir()仅创建一层目录

os.MKdirAll()创建多层目录。

创建文件:

os.Create()创建文件,如果文件存在,会将其覆盖。

打开和关闭文件:

os.OpenFile(filename,mode,perm)
mode:文件打开方式
perm:文件的权限。文件不存在时创建文件,需要指定权限

删除文件:

os.Remove(filename)

文件读取:

package main

import (
"fmt"
"io"
"os"
)

// 文件读取
func main() {
filePath:="C:\\Users\\sixinshuier\\Desktop\\分布式训练\\分布式训练.txt"
file,err:=os.Open(filePath)
if err!=nil{
fmt.Println(err)
}else {
bs:= make([]byte,1024*128,1024*128)
for{
n,err:=file.Read(bs)
if n==0 || err==io.EOF {
fmt.Println("读取文件结束!")
break
}
fmt.Println(string(bs[:n]))
}
}
file.Close()
}

文件写入:

package main

import (
"fmt"
"os"
)

// 文件写入

func main() {
filePath:="C:\\Users\\sixinshuier\\Desktop\\分布式训练\\分布式训练.txt"
file,err:=os.Open(filePath)
defer file.Close()
if err!=nil{
fmt.Println(err)
}else {
n,err:=file.Write([]byte("test write…."))
if err!=nil{
fmt.Println(err)
}else {
fmt.Println(n)
}
}
}

ioutil包:

ReadFile()  读取文件中所有的数据,返回读取的字节数组

WriteFile()向指定文件写入数据,如果文件不存在,则创建文件,写入数据之前清空文件

bufio

bufio实现了带缓冲的I/O操作,达到高效读写。

bufio包对io包下的对象Reader、Writer进行包装,分别实现了io.Reader和io.Writer接口,提供了数据缓冲功能,能够一定程度减少大块数据读写带来的开销,所以bufio比直接读写更快。

package main

import (
"bufio"
"fmt"
"io"
"os"
)

// bufino 读取文件

func main() {
filePath:="C:\\Users\\sixinshuier\\Desktop\\分布式训练\\分布式训练.txt"
// 打开文件
file,err:=os.Open(filePath)
defer file.Close()
if err!=nil{
fmt.Println(err)
}else {
// 创建缓冲区
reader:= bufio.NewReader(file)
fmt.Printf("%T",reader)
for {
// 读取文件
s,err:=reader.ReadString('\n')
if err==io.EOF{
break
}else {
fmt.Println(s)
}

    }  
}  

}