前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >2021-05-02:给定一个文件目录的路径,写一个函数

2021-05-02:给定一个文件目录的路径,写一个函数

原创
作者头像
福大大架构师每日一题
修改2021-05-04 22:26:22
3960
修改2021-05-04 22:26:22
举报

2021-05-02:给定一个文件目录的路径,写一个函数统计这个目录下所有的文件数量并返回。隐藏文件也算,但是文件夹不算 。

福大大 答案2021-05-02:

1.用filepath.Walk方法。

2.用广度优先遍历+ioutil。

代码用golang编写。代码如下:

代码语言:txt
复制
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, "\\", "/")
}

执行结果如下:

图片
图片

***

左神java代码

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档