GO基础之文件操作
一、文件操作的基本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() }
每天用心记录一点点。内容也许不重要,但习惯很重要!