Go|第1期Go遍历目录的三种方法
一、写在前面
中文名 | 英文名 | 说明 |
---|---|---|
目录 | directory |
一系列文件和文件夹的集合 |
文件夹 | folder |
用来存放文件和文件夹的容器 |
文件 | file |
用来存储信息的单个数据单元(文本、图像、声音等等) |
路径 | path |
用于定位文件的路径 |
我们用命令行 tree /?
和 tree /F
来查询树形目录,如下所示:
D:\Go_WorkSpace\p3-traversal>tree /?
以图形显示驱动器或路径的文件夹结构。
TREE [drive:][path] [/F] [/A]
/F 显示每个文件夹中文件的名称。
/A 使用 ASCII 字符,而不使用扩展字符。
D:\Go_WorkSpace\p3-traversal>tree /F
文件夹 PATH 列表
卷序列号为 277B-1704
D:.
│ go.mod
│ main_filepath_glob.go
│ main_filepath_walk.go
│ main_ioutil_ReadDir.go
│
└─父目录
│ 1.txt
│
└─子目录
│ 21.txt
│ 22.txt
│ 23.txt
│
└─孙目录
31.txt
32.txt
二、使用 ioutil.ReadDir
- 此方法读取目录的内容,并返回目录中每个文件或目录的
fs.FileInfo
对象切片; - 可以使用
for
循环遍历切片并打印出每个文件或目录的名称;
示例如下:
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())
}
}
结果输出:
D:\Go_WorkSpace\p3-traversal>go run main_ioutil_ReadDir.go
go.mod
main_filepath_glob.go
main_filepath_walk.go
main_ioutil_ReadDir.go
父目录
分析说明:
1、仅打印当前目录,不含子孙目录;
2、不会打印出.
和..
等特殊的目录;
三、使用 filepath.Walk
- 此方法遍历根位于指定目录的文件树(
a file tree
),并为遇到的每个文件或目录调用函数; - 可以使用匿名函数(
an anonymous function
)打印出每个文件或目录的名称
示例如下:
package main
import (
"fmt"
"os"
"path/filepath"
)
func main() {
err := filepath.Walk(".", func(path string, info os.FileInfo, err error) error {
fmt.Println(path)
return nil
})
if err != nil {
fmt.Println(err)
}
}
结果输出:
D:\Go_WorkSpace\p3-traversal>go run main_filepath_walk.go
.
go.mod
main_filepath_glob.go
main_filepath_walk.go
main_ioutil_ReadDir.go
父目录
父目录\1.txt
父目录\子目录
父目录\子目录\21.txt
父目录\子目录\22.txt
父目录\子目录\23.txt
父目录\子目录\孙目录
父目录\子目录\孙目录\31.txt
父目录\子目录\孙目录\32.txt
分析说明:
1、打印当前目录,含子孙目录;
2、包含.
等特殊的目录,遍历时需要排除;
四、使用 filepath.Glob
- 此方法返回与指定模式匹配的文件名列表;
- 可以使用通配符(
*
)来匹配当前目录中的所有文件
示例如下:
package main
import (
"fmt"
"log"
"os"
"path/filepath"
)
func main() {
pwd, _ := os.Getwd()
filePaths, err := filepath.Glob(filepath.Join(pwd, "*"))
if err != nil {
log.Fatal(err)
}
for _, filePath := range filePaths {
fmt.Println(filePath)
}
}
结果输出:
D:\Go_WorkSpace\p3-traversal>go run main_filepath_glob.go
D:\Go_WorkSpace\p3-traversal\go.mod
D:\Go_WorkSpace\p3-traversal\main_filepath_glob.go
D:\Go_WorkSpace\p3-traversal\main_filepath_walk.go
D:\Go_WorkSpace\p3-traversal\main_ioutil_ReadDir.go
D:\Go_WorkSpace\p3-traversal\父目录
分析说明:
1、仅打印当前目录,不含子孙目录;
2、不会打印出.
和..
等特殊的目录;
3、返回的是绝对路径;
我的微信公众号【会飞的小猴子】,等你来关注哦 ^ - ^
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhfibgcf
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01