Golang 文件夹相关操作
文件夹的创建
创建一级文件夹
如果文件夹已经存在会返回错误
1 | // 在所在盘的根目录创建文件夹,如果运行在F盘,则在F盘创建 F://oneLevelDir |
创建多级文件夹
想要在不同的位置创建文件夹,和创建一级文件夹一致。
1 | err := os.MkdirAll("multiDir1/second/third",0666) |
文件(夹)重命名
文件夹重命名
1 | err := os.Rename("oneLevelDir","oneLevelDir2") |
文件重命名
1 | err := os.Rename("test.txt","test2.txt") |
移动文件(夹)
可以用Rename完成文件移动操作,将test2.txt移到oneLevelDir2中
1 | err := os.Rename("test2.txt","oneLevelDir2/test2.txt") |
复制文件
1 | // 源文件 |
复制文件夹可以先创建文件夹,然后再遍历复制文件便可。
查询文件夹
方法一使用file.Readdir(n)获得信息
1 | // 当前文件夹 |
只获得文件夹名
1 | fileNameList,err := file.Readdirnames(0) |
返回文件名字符串数组
删除文件(夹)
删除文件
1 | err :=os.Remove("test2.txt") |
删除文件夹
删除文件夹及文件夹下所有数据
1 | err = os.RemoveAll("oneLevelDir2") |
Golang 文件相关操作
新建文件
使用OpenFile
中os.OCREATE
选项可以创建文件
1 | _,err := os.OpenFile("test2.txt",os.O_CREATE,0666) |
读取文件
方法一
可以读取出全部的数据
1 | file,err := os.Open("test2.txt") |
方法二
使用bufio
带缓冲读取
1 | file,err := os.Open("test2.txt") |
注意 当出现EOF错误时只是说明读取的行没有’\n’结尾,通常是文件末尾,但是还有一种情况是最后一行末尾没有换行符。这一行的数据也要存进去。
方法三
使用ioutil工具包
1 | data,err := ioutil.ReadFile("test2.txt") |
ReadFile()实现是使用os.Open()函数加上bytes.Buffer.ReadFrom()函数完成
写入文件
方法一
1 | file,err := os.OpenFile("test3.txt",os.O_RDWR|os.O_CREATE|os.O_TRUNC,0666) |
方法二
带缓冲的写入
1 | file,err := os.OpenFile("test3.txt",os.O_RDWR|os.O_CREATE|os.O_TRUNC,0666) |
方法三
ioutil.WriteFile
写入
1 | err := ioutil.WriteFile("test3.txt",[]byte("Hello,World3"),0666) |
实现方法是OpenFile()写入.golang官方实现如下,和方法一类似,但是更好。
1 | func WriteFile(filename string, data []byte, perm os.FileMode) error { |
总结
File默认实现了io.Writer和io.Reader的接口。所以bufio可以直接传file过去。
1 | type Reader interface { |
1 | type Writer interface { |
其它小技巧
string转Reader
1 | w := strings.NewReader("Hello World") |
用途,当需要流转换的时候。
1 | // 转换成Reader对象 |