2021-05-02:给定一个文件目录的路径,写一个函数统计这个目录下所有的文件数量并返回。隐藏文件也算,但是文件夹不算 。
2021-05-02:给定一个文件目录的路径,写一个函数统计这个目录下所有的文件数量并返回。隐藏文件也算,但是文件夹不算 。
福大大 答案2021-05-02:
1.用filepath.Walk方法。
2.用广度优先遍历+ioutil。
代码用golang编写。代码如下:
package main
import (
"container/list"
"fmt"
"io/ioutil"
"os"
"path/filepath"
"strings"
)
func main() {
ret := getFileNumber1("D:\\mysetup\\gopath\\src\\sf\\newclass")
fmt.Println("1.用filepath.Walk方法:", ret)
ret = getFileNumber2("D:\\mysetup\\gopath\\src\\sf\\newclass")
fmt.Println("2.用广度优先遍历+ioutil:", ret)
}
func getFileNumber1(folderPath string) int {
folderPath = toLinux(folderPath)
info, err := os.Lstat(folderPath)
//既不是文件,也不是文件夹
if err != nil {
return 0
}
//如果是文件
if !info.IsDir() {
return 1
}
//如果是文件夹
ans := 0
filepath.Walk(folderPath, func(path string, info os.FileInfo, err error) error {
if info.IsDir() {
return nil
}
ans++
return nil
})
//返回结果
return ans
}
func getFileNumber2(folderPath string) int {
folderPath = toLinux(folderPath)
info, err := os.Lstat(folderPath)
//既不是文件,也不是文件夹
if err != nil {
return 0
}
//如果是文件
if !info.IsDir() {
return 1
}
//文件夹添加到队列里
ans := 0
queue := list.New()
queue.PushBack(folderPath)
for queue.Len() > 0 {
files, _ := ioutil.ReadDir(queue.Front().Value.(string))
for _, file := range files {
if file.IsDir() {
queue.PushBack(filepath.Join(folderPath, file.Name()))
} else {
ans++
}
}
queue.Remove(queue.Front())
}
//返回结果
return ans
}
func toLinux(basePath string) string {
return strings.ReplaceAll(basePath, "\\", "/")
}
执行结果如下:
公众号:福大大架构师每日一题
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具