go文件&&目录操作
一:常规文件
1.go读取文件第一种做法【案例就是复制文件】
filePath:="./show.txt" copyFilepath:="./copy.txt" file,_:=os.Open(filePath) defer file.Close() buf:=make([]byte,1024) for { _,err:=file.Read(buf) if err == io.EOF { break; } copyfile,_:= os.OpenFile(copyFilepath,os.O_APPEND|os.O_CREATE,666)//复制文件给另一个 copyfile.Write(buf) }
2.go读取完人家第二种做法
//读取文件第二种办法 bufio filePath:="./show.txt" file,_:=os.OpenFile(filePath,os.O_CREATE|os.O_APPEND,666) buf:=make([]byte,1024) newReader:=bufio.NewReader(file) n,_:=newReader.Read(buf) fmt.Println(string(buf[:n]))
3.go读取文件第三种做法
//读取文件第三中办法 filePath:="./show.txt" buf,err:=ioutil.ReadFile(filePath) if err != nil { fmt.Println("read file is error") } fmt.Println(string(buf))
二:json文件
1.读取json文件【简单案例】
package main import ( "encoding/json" "fmt" "io/ioutil" ) type Persion struct { Name string Age int Sex int } func main(){ p1:= Persion{} filePath:="./t1.json" content,_:=ioutil.ReadFile(filePath) json.Unmarshal(content,&p1) fmt.Println(p1.Name) fmt.Println(p1.Age) fmt.Println(p1.Sex) }
2.复杂一点
//这是json文件
{ "name":"lisi", "age": 20, "sex": 1, "company":{ "name": "测试信息", "address": "测试地址", "tel": "1231312312312" } }
//这是代码
package main import ( "encoding/json" "fmt" "io/ioutil" ) type Company struct { Name string Address string Tel string } type Persion struct { Name string Age int Sex int Company Company } //如果json文件有嵌套的话 func main(){ p1:= Persion{} filePath:="./t1.json" content,_:=ioutil.ReadFile(filePath) fmt.Println(string(content)) json.Unmarshal(content,&p1) fmt.Println(p1.Name) fmt.Println(p1.Age) fmt.Println(p1.Sex) fmt.Println(p1.Company.Name) }
3.生成json文件
package main import ( "encoding/json" "io/ioutil" ) type Company struct { Name string Address string Tel string } type Persion struct { Name string Age int Sex int Company Company } //如果json文件有嵌套的话 func main(){ p1 :=&Persion{} p1.Name="lisi" p1.Age=20 p1.Sex=1 p1.Company.Name="测试名字" p1.Company.Address="测试地址信息" p1.Company.Tel="130011666" targetFile := "./per.json" data,_:=json.Marshal(p1) ioutil.WriteFile(targetFile,data,666) }
三:日志文件
描述:go记录日志方式使用包【log】里面有三个比较重要的方法print,Panicln,Fatalln使用方式如下
1.print方法使用
filePath:="./log.txt" file,_:= os.OpenFile(filePath,os.O_APPEND|os.O_CREATE,666) no:=[]int{6,8,10} log.SetOutput(io.Writer(file)) defer file.Close() log.Print(no) //打日志,程序继续向下执行
2.Panic函数
filePath:="./log.txt" file,_:= os.OpenFile(filePath,os.O_APPEND|os.O_CREATE,666) no:=[]int{6,8,10} log.SetOutput(io.Writer(file)) defer file.Close() log.Panic(no) //打日志,报错,程序执行到这里终止执行
3.Fatal函数
filePath:="./log.txt" file,_:= os.OpenFile(filePath,os.O_APPEND|os.O_CREATE,666) no:=[]int{6,8,10} log.SetOutput(io.Writer(file)) defer file.Close() log.Fatal(no) //打日志,不报错 程序执行到这里终止执行
go目录操作
1、创建单层目录
mkdir(name,perm)权限
dir:="./mkdir"
err:=os.Mkdir(dir,0777)
if err != nil {
    fmt.Println("create dir is error")
}
2、创建多层目录
path:="./aa/bb/cc"
err:=os.MkdirAll(path,0777)
if err != nil {
fmt.Println("create is error")
}
3.根据时间创建目录
uploadifle:="./upload/file/"+time.Now().Format("2006/01/02/")
_,err:=os.Stat(uploadifle) if err!= nil { os.MkdirAll(uploadifle,0777)
}
二:.go重命名目录和删除目录
oldPath:= "upload"
newPath:="newupload"
err:=os.Rename(oldPath,newPath)
if err != nil {
    fmt.Println(err)
}
path:="newupload"
err:=os.Remove(path)//如果是递归目录,删除失败
err:=os.RemoveAll(path) //是否递归目录一次性全部删除
if err != nil {
    fmt.Println("is error")
}
三:遍历目录
func main(){
    path:="./upload_walk/upload"+time.Now().Format("2006/01/02")
    _,err:= os.Stat(path)
    if err != nil {
        os.MkdirAll(path,0777)//创建目录
    }
    rootpath:="./upload_walk"
    filepath.Walk(rootpath,readdir)
}
func readdir(path string, f os.FileInfo, err error) error{
    fmt.Println(path)
    return nil
}
 
                    
                     
                    
                 
                    
                
 
                
            
         
 
         浙公网安备 33010602011771号
浙公网安备 33010602011771号