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()) }}