一、文件操作的基本API
func main() {
//绝对路径
fileInfo , err := os.Stat("E:/a.txt")
fileInfo , err = os.Stat("E:/")
if err !=nil {
fmt.Println("err:" , err.Error())
} else {
fmt.Printf("%T \n" , fileInfo)
fmt.Printf("%v \n" , fileInfo)
//文件名
fmt.Println(fileInfo.Name())
//是否是目录
fmt.Println(fileInfo.IsDir())
//文件尺寸大小
fmt.Println(fileInfo.Size())
//mode 权限
fmt.Println(fileInfo.Mode())
//文件最后修改时间
fmt.Println(fileInfo.ModTime())
}
}
文件路径:
- 1、绝对路径:absolute
- 2、相对路径:relative 都是相当于当前的工程 (.当前目录 ..上一层)
(1)、判断是否是绝对路径filepath.IsAbs()
(2)、获取相对路径filepath.Rel()
(3)、获取绝对路径filepath.Abs()
(4)、拼接路径path.Join()
文件操作:
1.创建文件夹,如果文件夹存在,创建失败
- os.MKdir()
- os.MKdirAll()
2.创建文件:如果文件存在,会覆盖
- os.Create()-->*file
3.打开文件:
- os.Open(filename)
- os.OpenFile(filename,mode,perm)
4.关闭文件:
- file.Close()
5.删除:
- os.Remove()
- os.RemoveAll()

package main
import (
"os"
"fmt"
)
func main() {
/*
文件操作:
1.创建文件夹,如果文件夹存在,创建失败
os.MKdir()
os.MKdirAll()
2.创建文件:如果文件存在,会覆盖
os.Create()-->*file
3.打开文件:
os.Open(filename)
os.OpenFile(filename,mode,perm)
4.关闭文件:
file.Close()
5.删除:
os.Remove()
os.RemoveAll()
*/
// 1、创建目录
fileName1 := "./test1"
err := os.Mkdir(fileName1, os.ModePerm)
if err != nil {
fmt.Println("err:", err.Error())
} else {
fmt.Printf("%s 目录创建成功!\n", fileName1)
}
fileName2 := "./test2/abc/xyz"
err = os.MkdirAll(fileName2, os.ModePerm)
if err != nil {
fmt.Println("err:", err.Error())
} else {
fmt.Printf("%s 目录创建成功!\n", fileName2)
}
//2、创建文件.如果文件已经存在,则文件被覆盖
fileName3 := "./test1/abc.txt"
file1, err := os.Create(fileName3)
if err != nil {
fmt.Println("err:", err.Error())
} else {
fmt.Printf("%s 创建成功!%v \n", fileName3, file1)
}
// 3、打开文件
file2, err := os.Open(fileName3)
if err != nil {
fmt.Println("err:", err.Error())
} else {
fmt.Printf("%s 打开成功!%v \n", fileName3, file2)
}
/*
第一个参数:文件名称
第二个参数:文件的打开方式
O_RDONLY:只读模式(read-only)
O_WRONLY:只写模式(write-only)
O_RDWR:读写模式(read-write)
O_APPEND:追加模式(append)
O_CREATE:文件不存在就创建(create a new file if none exists.)
第三个参数:文件的权限:文件不存在创建文件,需要指定权限
*/
fileName4 := "./test1/abc2.txt"
file4, err := os.OpenFile(fileName4, os.O_RDWR|os.O_CREATE, os.ModePerm)
if err != nil {
fmt.Println("err:", err.Error())
} else {
fmt.Printf("%s 打开成功!%v \n", fileName4, file4)
}
//4、关闭文件,程序与文件的联系断开
file4.Close()
// 5、删除文件和目录
fileName5 := "./test1"
err = os.Remove(fileName5)
if err != nil {
fmt.Println(err)
} else {
fmt.Printf("%s 删除成功!" , fileName5)
}
err = os.RemoveAll(fileName5)
if err != nil {
fmt.Println(err)
} else {
fmt.Printf("%s 删除成功!" , fileName5)
}
}
文件读写

/**
2.读取文件file.Read([]byte)-->n,err 从文件中开始读取数据,存入到byte切片中,返回值n是本次实际读取的数据量如果读取到文件末尾,n为0,err为EOF:end of file
*/
func readFile(fileName string){
file2,err:=os.OpenFile(fileName, os.O_RDWR|os.O_CREATE, os.ModePerm)
if err!=nil{
fmt.Println(file2);
}else {
bs:=make([]byte,8,1024*8);
n:= -1;
str:="";
for{
n,err=file2.Read(bs);
fmt.Printf("n:%v \n",n)
if n==0||err==io.EOF{
fmt.Println("read file end")
break;
}
str= strings.Join([]string{str,string(bs[:n])},"")
}
fmt.Println(str)
}
//3、关闭文件
file2.Close()
}
func writeFile(fileName string){
str:="I Love China 我爱中国";
bs:=[]byte(str);
file2,err:=os.OpenFile(fileName, os.O_RDWR|os.O_CREATE, os.ModePerm)
if err!=nil{
fmt.Println(file2);
}else {
file2.Write(bs);
}
file2.Close();
}
二、ioutil 包
/*
ioutil包:
ReadFile() //读取文件中的所有的数据,返回读取的字节数组
WriteFile() //向指定文件写入数据,如果文件不存在,则创建文件,写入数据之前清空文件
ReadDir() //读取一个目录下的子内容:子文件和子目录,但是仅有一层
TempDir() //在当前目录下,创建一个以指定字符串为前缀的临时文件夹,并返回文件夹路径
TempFile() //在当前目录下,创建一个以指定字符串为前缀的文件,并以读写模式打开文件,并返回os.File指针对象
*/

package main
import (
"io/ioutil"
"fmt"
"os"
)
func main() {
/*
ioutil包:
ReadFile() //读取文件中的所有的数据,返回读取的字节数组
WriteFile() //向指定文件写入数据,如果文件不存在,则创建文件,写入数据之前清空文件
ReadDir() //读取一个目录下的子内容:子文件和子目录,但是仅有一层
TempDir() //在当前目录下,创建一个以指定字符串为前缀的临时文件夹,并返回文件夹路径
TempFile() //在当前目录下,创建一个以指定字符串为前缀的文件,并以读写模式打开文件,并返回os.File指针对象
*/
//1、ReadFile() //读取文件中的所有的数据,返回读取的字节数组
fileName1 := "./files/blockchain.txt"
data, err := ioutil.ReadFile(fileName1)
if err != nil {
fmt.Println("文件打开异常", err.Error())
} else {
fmt.Println(string(data))
}
//2、WriteFile() //向指定文件写入数据,如果文件不存在,则创建文件,写入数据之前清空文件
fileName2 := "./files/xyz.txt"
s1 := "Steven陪你学区块链"
err = ioutil.WriteFile(fileName2, []byte(s1), 0777)
if err != nil {
fmt.Println("写入文件异常", err.Error())
} else {
fmt.Println("文件写入OK!")
}
//3、文件拷贝
err = ioutil.WriteFile(fileName2 , data , os.ModePerm)
if err != nil {
fmt.Println("文件拷贝异常", err.Error())
} else {
fmt.Println("文件拷贝成功!")
}
//4、ReadDir() //读取一个目录下的子内容:子文件和子目录,但是仅有一层
dirName := "./"
fileInfos , err := ioutil.ReadDir(dirName)
if err != nil {
fmt.Println("目录遍历异常", err.Error())
} else {
for i , v := range fileInfos {
fmt.Println(i , v.Name() , v.IsDir() , v.Size() , v.ModTime())
}
}
//5、TempDir() //在当前目录下,创建一个以指定字符串为前缀的临时文件夹,并返回文件夹路径
filename , err := ioutil.TempDir("./" , "temp")
if err != nil {
fmt.Println("创建目录失败" , err.Error())
} else {
fmt.Println(filename)
}
//6、TempFile() //在当前目录下,创建一个以指定字符串为前缀的文件,并以读写模式打开文件,并返回os.File指针对象
file1 , err := ioutil.TempFile(filename , "temp")
if err != nil {
fmt.Println("创建文件失败" , err.Error())
} else {
file1.WriteString("写入内容:" + file1.Name())
}
file1.Close()
}
