知識點 ioutil

package os_ioutilimport (   "fmt"   "io/ioutil"   "os"   "strings")func main() {   //獲取當前登陸用戶   //u, _ := user.Current()   //fmt.Println(u.Name)   //fmt.Println(u.Uid)   //fmt.Println(u.Gid)   //fmt.Println(u.Username)   //fmt.Println(u.HomeDir)   /*//建立文件夾   //os.Mkdir()中的路徑必須是父目錄必須存在,且若是文件夾存在則也報錯   _ := os.Mkdir("D:/a/b", os.ModeDir)   //os.MkdirAll()功能很強大   _ := os.MkdirAll("D:/a/c", os.ModeDir)   */   //建立文件   //若是文件已存在則建立新的覆蓋原來的   //f, err := os.Create("D:/b/test.txt") //文件的上一級目錄必須存在   //if err != nil {   // fmt.Println("文件建立失敗")   //}   //fmt.Println(f.Name())   //重命名文件或刪除文件夾   //err := os.Rename("D:/b/test.txt", "D:/b/a.txt")   //if err != nil {   // fmt.Println("重命名文件失敗")   //}   //獲取文件(文件夾)信息   //f, _ := os.Open("D:/b/a.txt")   //defer f.Close()   //fileinfo, _ := f.Stat()   //fmt.Println(fileinfo.Name())    //文件名稱   //fmt.Println(fileinfo.IsDir())   //是不是文件夾   //fmt.Println(fileinfo.Mode())    //文件權限   //fmt.Println(fileinfo.ModTime()) //文件的修改時間   //fmt.Println(fileinfo.Size())    //文件的大小   //刪除文件後刪除文件夾   //_ = os.Remove("D:/b/c.txt")//通常不用,刪除的必須是文件或空文件夾且必須存在   //_ = os.RemoveAll("D:/a")//只要文件夾存在就刪除   //輸入流和輸出流,相對於程序來講的,下面是輸入流   //第一種字符串的   r := strings.NewReader("hello  World")   b := make([]byte, r.Size())   n, _ := r.Read(b)   fmt.Println("讀取數據長度爲", n)   fmt.Println("讀取內容爲", string(b))   //第二種文件形式的   f, _ := os.Open("D:/b/a.txt")   fileinfo, _ := f.Stat()   b = make([]byte, fileinfo.Size())   _, _ = f.Read(b)   fmt.Println(string(b))   //open()與openFile()的區別   //open()這是一個只讀打開模式,實際上就是 os.OpenFile() 的快捷操做,它的原型以下:   //func Open(name string) (file *File, err error) {   // // return OpenFile(name, O_RDONLY, 0)   // //}   //func OpenFile(name string, flag int, perm FileMode) (file *File, err error)   //這個複雜點,須要提供文件路徑、打開模式、文件權限   //O_RDONLY:只讀模式(read-only)   //O_WRONLY:只寫模式(write-only)   //O_RDWR:讀寫模式(read-write)   //O_APPEND:追加模式(append)   //O_CREATE:文件不存在就建立(create a new file if none exists.)   //O_EXCL:與 O_CREATE 一塊兒用,構成一個新建文件的功能,它要求文件必須不存在(used with O_CREATE, file must not exist)   //O_SYNC:同步方式打開,即不使用緩存,直接寫入硬盤   //O_TRUNC:打開並清空文件   //文件權限(unix權限位):只有在建立文件時才須要,不須要建立文件能夠設置爲 0。os庫雖然提供常量,可是我通常直接寫數字,如0664   //下面是輸出流,輸出流就不能用open()了,由於open只是讀取數據並不修改,若要修改則必須用openFile   //func (self *Log) WriteLogFile(log string) {   // logFile, err := os.OpenFile("../log/log_"+time.Now().Format("2006-01-02")+".txt", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)   // if err != nil {   //    fmt.Println("open log file failed!!!")   //    return   // }   // logFile.WriteString(time.Now().Format("2006-01-02 15:04:05.000") + " " + log)   // logFile.Close()   //}   filePath := "D:/a.txt"   f, err := os.OpenFile(filePath, os.O_APPEND, 0777) //能夠將將第二個參數加上os.O_CREAT   if err != nil {      f, _ = os.Create(filePath)   }   defer f.Close()   f.Write([]byte("ashdkasdkaskda")) //也能夠直接用writestring()(封裝了write方法)   //第三個參數表示文件權限,如:0666   //第一個0(0000)表示這個數是八進制   //第二個6(0110)表示文件全部者有讀寫權限,但沒有執行權限   //第三個6(0110)表示文件擁有着同組用戶有讀寫權限,但沒有執行權限   //第三個6(0110)表示其餘用戶有讀寫權限,但沒有執行權限   //7(0111)最高權限表示可讀可寫可執行   //4(0100) 可讀不可寫不能被執行   //ioutil包,含有如下函數ioutil.ReadAll()-->和os.open()結合(只有先打開才能讀取),也能夠用更簡單的ioutil.Readfile(path)   //ioutil.WriteFile(path,[]byte(""sjhdajkshdkj),0664)//具備侷限性,其實是先清空再寫進去   //ioutil。ReadDir(path) //讀取文件夾的內容   fi, _ := ioutil.ReadDir(filepath)   for _, v := range fi {      fmt.Println(v.Name())   }}
相關文章
相關標籤/搜索