Go语言学习(九)文件操作
2018-01-02 11:18
471 查看
1相关api介绍
1.1建立File内存地址api
//返回File的内存地址,错误信息,通过os库调用 func Create(name string)(file *File,err Error) //返回文件的内存地址,通过os库调用 func NewFile(fd int,name string) *File
1.2打开文件api
//返回File的内存地址,错误信息,通过os库调用 func Open(name string)(file *File,err Error) //返回File的内存地址,错误信息,通过os库调用 func OpenFile(name string,flag int,perm unit32)(file *File,err Error)
1.3写文件api
//写入一个slice,返回写的个数,错误信息,通过File的内存地址调用 func (file *File)Write(b[]bye)(n int,err Error) //从slice的某个位置开始写入,返回写的个数,返回写的个数,错误信息,通过File的内存地址调用 func(file *File)WriteAt(b []byte,off int64)(n int,err Error) //写入一个字符串,返回写的个数,错误信息,通过File的内存地址调用 func(file *File) WriteString(s string) (ret int,err Error)
1.4读文件api
//读取一个slice,返回读的个数,错误信息,通过File的内存地址调用 func(file *File) Read(b []byte)(n int,err Error) //从slice的某个位置开始读取,返回读到的个数,错误信息,通过File的内存地址调用 func (file *File) ReadAt(b []byte,off int6 4000 4)(n int,err Error)
1.5删除文件api
//传入文件的路径来删除文件,返回错误个数 func Remove(name string)Error
1写文件的实例代码
package main import ( "fmt" "os" ) func main() { userFile := "d:/test.txt" //文件路径 fout, err := os.Create(userFile) //根据路径创建File的内存地址 defer fout.Close() //延迟关闭资源 if err != nil { fmt.Println(userFile, err) return } //循环写入数据到文件 for i := 0; i < 10; i++ { fout.WriteString("Hello World!\r\n") //写入字符串 fout.Write([]byte("abcd!\r\n")) //强转成byte slice后再写入 } }
输出的文件内容:
Hello world!
abcd!
Hello world!
abcd!
Hello world!
abcd!
Hello world!
abcd!
Hello world!
abcd!
Hello world!
abcd!
Hello world!
abcd!
Hello world!
abcd!
Hello world!
abcd!
Hello world!
abcd!
3.读文件的实例代码
package main import ( "fmt" "os" ) func main() { userFile := "d:/test.txt" //文件路径 fin, err := os.Open(userFile) //打开文件,返回File的内存地址 defer fin.Close() //延迟关闭资源 if err != nil { fmt.Println(userFile, err) return } buf := make([]byte, 1024) //创建一个初始化容量为1024的slice,作为缓冲容器 for { //循环读取文件数据到缓冲容器中,返回读取到的个数 n, _ := fin.Read(buf) if 0 == n { break //如果读到个数为0,则读取完毕,跳出循环 } //从缓冲slice中写出数据,从slice下标0到n,通过os.Stdout写入到控制台 os.Stdout.Write(buf[:n]) } }
运行结果:
G:\GoCodeHome\demo\bin>go build demo4
G:\GoCodeHome\demo\bin>demo4
Hello world!
abcd!
Hello world!
abcd!
Hello world!
abcd!
Hello world!
abcd!
Hello world!
abcd!
Hello world!
abcd!
Hello world!
abcd!
Hello world!
abcd!
Hello world!
abcd!
Hello world!
abcd!
4同时使用os.Open和os.Create操作文件
package main import ( "io" "os" ) func main() { fi, err := os.Open("d:/test.txt") //打开输入*File if err != nil { panic(err) } defer fi.Close() fo, err := os.Create("d:/output.txt") //创建输出*File if err != nil { panic(err) } defer fo.Close() buf := make([]byte, 1024) for { n, err := fi.Read(buf) //从input.txt读取 if err != nil && err != io.EOF { panic(err) } if n == 0 { break } if n2, err := fo.Write(buf[:n]); err != nil { //写入output.txt,直到错误 panic(err) } else if n2 != n { panic("error in writing") } } }
5使用bufio库
package main import ( "bufio" "io" "os" ) func main() { fi, err := os.Open("D:/test.txt") //打开输入*File if err != nil { panic(err) } defer fi.Close() r := bufio.NewReader(fi) //创建一个读取缓冲流 fo, err := os.Create("D:/output.txt") //创建输出*File if err != nil { panic(err) } defer fo.Close() w := bufio.NewWriter(fo) //创建输出缓冲流 buf := make([]byte, 1024) for { n, err := r.Read(buf) if err != nil && err != io.EOF { panic(err) } if n == 0 { break } if n2, err := w.Write(buf[:n]); err != nil { panic(err) } else if n2 != n { panic("error in writing") } } if err = w.Flush(); err != nil { panic(err) } }
6.使用ioutil库
package main import ( "io/ioutil" ) func main() { b, err := ioutil.ReadFile("d:/test.txt") //读文件 if err != nil { panic(err) } err = ioutil.WriteFile("d:/output.txt", b, 0644) //写文件 if err != nil { panic(err) } }
7遍历文件夹
package main import ( "flag" "fmt" "os" "path/filepath" ) func getFilelist(path string) { err := filepath.Walk(path, func(path string, f os.FileInfo, err error) error { if f == nil { return err } if f.IsDir() { return nil } println(path) return nil }) if err != nil { fmt.Printf("filepath.Walk()returned %v\n", err) } } func main() { flag.Parse() root := flag.Arg(0) getFilelist(root) }
运行结果:
相关文章推荐
- go语言学习-文件操作 path path/filepath
- Go语言学习(九)文件操作
- Go语言学习(九)文件操作
- Go语言学习笔记(五)文件操作
- GO语言学习:使用io.copyN实现网络文件传输
- go语言文件操作
- 【Go语言】集合与文件操作
- go 语言文件操作
- 学习C/C++语言:文件的操作
- Go语言基础学习五-一些数值操作的简单例子
- go语言文件操作,这期资料比较详细( 欢迎加入go语言群: 218160862 )
- Go语言文件操作
- 关于C语言文件操作的学习总结
- go语言学习-文件读写 io os ioutil
- 三、go语言操作 mongodb mgo --go语言学习笔记
- Go语言文件操作
- Go语言文件操作的方法
- Go语言 操作二进制文件
- Go学习笔记二: 函数,文件操作及网络通信
- linux学习:c语言文件操作—读文件