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