Go 操作文件 遍历目录获取文件列表
通过go遍历目录获取文件列表
本文将会列举三种方法
by Using:
filepath.Walk
ioutil.ReadDir
os.File.Readdir
使用filepath.Walk
path/filepath 标准库的包提供了便捷的Walk方法,它能自动的扫描子目录,使用起来也很简单
package main import ( "fmt" "os" "path/filepath" ) func main() { var files []string root := "/some/folder/to/scan" err := filepath.Walk(root, func(path string, info os.FileInfo, err error) error { files = append(files, path) return nil }) if err != nil { panic(err) } for _, file := range files { fmt.Println(file) } }
使用ioutil.ReadDir
filepath.Walk是很方便但是它会扫描所有子文件夹,缺省情况下,但这有时候不是我们想要的需求
go的标准库还提供了ioutil.ReadDir
ioutil.ReadDir需要一个string类型的文件夹路径然后返回一个os.FileInfo的切片,在上文中提到过。
package main import ( "fmt" "io/ioutil" "log" ) func main() { files, err := ioutil.ReadDir(".") if err != nil { log.Fatal(err) } for _, file := range files { fmt.Println(file.Name()) } }
使用os.File.Readdir
ReadDir内部的实现方式
// ReadDir reads the directory named by dirname and returns // a list of directory entries sorted by filename. func ReadDir(dirname string) ([]os.FileInfo, error) { f, err := os.Open(dirname) if err != nil { return nil, err } list, err := f.Readdir(-1) f.Close() if err != nil { return nil, err } sort.Slice(list, func(i, j int) bool { return list[i].Name() < list[j].Name() }) return list, nil }
我们可以看到它只扫描文件夹目录,然后将文件通过名字排序。如果我们不需要这种排序我们可以这样:
package main import ( "fmt" "log" "os" ) func main() { dirname := "." f, err := os.Open(dirname) if err != nil { log.Fatal(err) } files, err := f.Readdir(-1) f.Close() if err != nil { log.Fatal(err) } for _, file := range files { fmt.Println(file.Name()) } }
Go获取当前项目绝对路径
package main import ( "fmt" "os" "path/filepath" ) func main() { //获取当前项目绝对路径 path, err2 := os.Executable() if err2 != nil { fmt.Println(err2) } dir := filepath.Dir(path) fmt.Println("111", path) // /Users/mac/repose/idphoto_server_lite/test/test3 fmt.Println("2222", dir) // /Users/mac/repose/idphoto_server_lite/test }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
2018-03-18 axel命令 文件下载
2018-03-18 python 列表的内容赋值
2018-03-18 Python的sys.argv使用说明 通过终端写入环境变量
2018-03-18 python map函数的使用
2018-03-18 python 将txt内容写入excel