golang中文件和路径用法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 | package main import ( "fmt" "io/fs" "io/ioutil" "os" "path" "path/filepath" ) func main() { // 文件和路径相关的功能包含了:os、path、filepath、ioutil包 // 1. 创建文件夹 // (1)创建单层目录,已存在则err有错 err := os.Mkdir( "x2" , 0755) fmt.Println(err) // (2)创建多级目录,已存在则什么都不做 err2 := os.MkdirAll( "t2/src/code/test" , 0755) fmt.Println(err2) // 另一种写法 if err3 := os.Mkdir( "x2" , 0755); err3 == nil { fmt.Println( "文件夹x2创建成功" ) } else { fmt.Println(err) } if err4 := os.MkdirAll( "t2/src/code/test/xxx.go" , 0755); err4 == nil { fmt.Println( "文件夹t2/src/code/test创建成功" ) } else { fmt.Println(err) } // 2. 删除文件和文件夹 // (1)删除文件或空文件夹,文件夹下存在文件则报错 if err5 := os.Remove( "x2" ); err5 != nil { fmt.Println( "删除失败" , err5) } else { fmt.Println( "删除成功" ) } // (2) 删除文件或文件夹(同时删除子目录) if err6 := os.RemoveAll( "t1" ); err6 != nil { fmt.Println( "删除失败" , err6) } else { fmt.Println( "删除成功" ) } // 3. 路径是否存在 // 判断文件或文件夹是否存在 _, err7 := os.Stat( "t2/src/code/test/xxx.go" ) if err7 != nil { // err7错误产生的原因有可能是不存在或者别的,所以需要再次判断一下是不存在导致的 if os.IsNotExist(err7) { fmt.Println( "文件或文件夹不存在" ) } } else { fmt.Println( "文件或文件夹已存在" ) } // 4. 是否是文件夹 fileObject, _ := os.Stat( "t2/src/code/test" ) result := fileObject.IsDir() fmt.Println(result) // 5. 生成绝对路径 absPath, _ := filepath.Abs( "t2/src" ) fmt.Println(absPath) // 6. 获取上级目录 absPath2, _ := filepath.Abs( "t2" ) fmt.Println(absPath2) basePath := filepath.Dir(filepath.Dir(absPath2)) fmt.Println(basePath) // 7. 遍历目录(一级) fileList, _ := ioutil.ReadDir( "t2" ) for _, obj := range fileList { fmt.Println(obj.Name()) } // 8. 遍历目录(多级) filepath.Walk( "t2" , func (path string, info fs.FileInfo, err error) error { if !info.IsDir() { fmt.Println( "文件有" , path) } return nil }) // 9. 路径拼接 filePath2 := path.Join( "v1" , "v2" , "v3/v4" , "v6.exe" ) fmt.Println(filePath2) // 10. 文件扩展名 ext := path.Ext( "/xxxx/xxx/xx/xx.txt" ) fmt.Println(ext) } |
2. 获取一个文件夹下所有的文件路径,获取一个路径的最后文件名
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | package main import ( "fmt" "path/filepath" ) func main() { templatesDir := "./templates" // filepath.Glob 获取一个文件夹下所有的文件路径切片 adminLayouts, _ := filepath.Glob(templatesDir + "/layouts/*" ) fmt.Println(adminLayouts) // 输出: [templates\layouts\base_admins.html templates\layouts\base_articles.html] adminInclude, _ := filepath.Glob(templatesDir + "/articles/*" ) for _, include := range adminInclude { layoutCopy := make([]string, len(adminLayouts)) copy(layoutCopy, adminLayouts) files := append(layoutCopy, include) fmt.Println(files) // 输出:[templates\layouts\base_admins.html templates\layouts\base_articles.html templates\articles\article.html] // 输出:[templates\layouts\base_admins.html templates\layouts\base_articles.html templates\articles\index.html] // filepath.Base 获取一个路径的最后文件名 fmt.Println(filepath.Base(include)) // 输出:article.html // 输出:index.html } } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)