通常来讲经常使用的有四种segmentfault
先说结论缓存
当每次读取块的大小小于4KB,建议使用bufio.NewReader(f), 大于4KB用bufio.NewReaderSize(f,缓存大小)函数
要读Reader, 图方便用ioutil.ReadAll()性能
一次性读取文件,使用ioutil.ReadFile()ui
反正不建议用普通的Read.net
总之要性能就bufio,方便就ioutilcode
https://segmentfault.com/a/11... 这篇文章有深刻研究对象
如下列出各类方法的示例blog
func read1(path string){ fi,err := os.Open(path) if err != nil{ panic(err) } defer fi.Close() buf := make([]byte,1024) for{ n,err := fi.Read(buf) if err != nil && err != io.EOF{panic(err)} if 0 ==n {break} fmt.Println(string(buf[:n])) } }
func read2(path string){ fi,err := os.Open(path) if err != nil{panic(err)} defer fi.Close() r := bufio.NewReader(fi) buf := make([]byte,1024) for{ n,err := r.Read(buf) if err != nil && err != io.EOF{panic(err)} if 0 ==n {break} fmt.Println(string(buf[:n])) } }
func read4(path string){ r,err := ioutil.ReadFile(path) if err != nil{panic(err)} fmt.Println(r) }
或者排序
func read3(path string){ fi,err := os.Open(path) if err != nil{panic(err)} defer fi.Close() _,err = ioutil.ReadAll(fi) }
建立名称为name的目录,权限设置是perm,例如0777
根据path建立多级子目录,例如astaxie_test1_test2。
删除名称为name的目录,当目录下有文件或者其余目录时会出错
根据path删除多级子目录,若是path是单个名称,那么该目录下的子目录所有删除。
package main import ( "fmt" "os" ) func main() { os.Mkdir("astaxie", 0777) os.MkdirAll("astaxie/test1/test2", 0777) err := os.Remove("astaxie") if err != nil { fmt.Println(err) } os.RemoveAll("astaxie") }
新建文件能够经过以下两个方法
根据提供的文件名建立新的文件,返回一个文件对象,默认权限是0666的文件,返回的文件对象是可读写的。
根据文件描述符建立相应的文件,返回一个文件对象
经过以下两个方法来打开文件:
该方法打开一个名称为name的文件,可是是只读方式,内部实现其实调用了OpenFile。
打开名称为name的文件,flag是打开的方式,只读、读写等,perm是权限
写入byte类型的信息到文件
在指定位置开始写入byte类型的信息
写入string信息到文件
读取数据到b中
从off开始读取数据到b中
package main import ( "fmt" "os" ) func main() { userFile := "asatxie.txt" fl, err := os.Open(userFile) if err != nil { fmt.Println(userFile, err) return } defer fl.Close() buf := make([]byte, 1024) for { n, _ := fl.Read(buf) if 0 == n { break } os.Stdout.Write(buf[:n]) } }
调用该函数就能够删除文件名为name的文件
包名 ”io/ioutil“
func ReadAll(r io.Reader) ([]byte, error)
读取 r 中全部数据并返回
func main() { s := strings.NewReader("Hello World!") ra, _ := ioutil.ReadAll(s) fmt.Printf("%s", ra) }
func ReadFile(filename string) ([]byte, error)
直接读取文件
func main() { ra, _ := ioutil.ReadFile("file path") fmt.Printf("%s", ra) }
func WriteFile(filename string, data []byte, perm os.FileMode) error
WriteFile 向文件 filename 中写入数据 data
若是文件不存在,则以 perm 权限建立该文件
若是文件存在,os.FileMode 不一样使用不一样的规则
func main() { fn := "file path"" s := []byte("Hello World!") ioutil.WriteFile(fn, s, os.ModeAppend) rf, _ := ioutil.ReadFile(fn) fmt.Printf("%s", rf) }
func ReadDir(dirname string) ([]os.FileInfo, error)
ReadDir 读取目录 dirmane 中的全部目录和文件(不包括子目录)
返回读取到的文件的信息列表和读取过程当中遇到的任何错误
返回的文件列表是通过排序的
func main() { rd, err := ioutil.ReadDir("file path") for _, fi := range rd { fmt.Println("") fmt.Println(fi.Name()) fmt.Println(fi.IsDir()) fmt.Println(fi.Size()) fmt.Println(fi.ModTime()) fmt.Println(fi.Mode()) } fmt.Println("") fmt.Println(err) }
https://blog.csdn.net/chenbao...
先参考这篇博客,有时间深刻研究