通常來講經常使用的有四種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...
先參考這篇博客,有時間深刻研究