Golang程序搜索目录中的文件

Golang程序搜索目录中的文件

在开发Golang程序时,经常需要搜索指定目录下的文件,比如我们需要找到某个目录中的所有.log文件,或者以某个关键字命名的文件,那么如何实现文件搜索功能呢?

方案一:使用filepath.Walk函数

Go的标准库中提供了filepath.Walk函数,可以遍历目录树中的所有文件和目录。我们只需要实现一个回调函数,每当遍历到一个文件时就调用,实现对该文件的操作即可。

示例代码:

package main

import (
    "fmt"
    "os"
    "path/filepath"
)

func walkFunc(path string, info os.FileInfo, err error) error {
    if err != nil {
        // 错误处理
        return err
    }
    if !info.IsDir() {
        // 处理文件
        fmt.Println(path)
    }
    return nil
}

func main() {
    // 遍历当前目录下的所有文件
    root := "."
    err := filepath.Walk(root, walkFunc)
    if err != nil {
        fmt.Println(err)
    }
}

运行结果:

./test.txt
./main.go
./README.md

可以看到,该程序成功遍历了当前目录下的所有文件,并打印了文件路径。

但是,我们还需要对文件进行筛选,只输出符合条件的文件。

方案二:使用filepath.Glob函数

Go的标准库中还提供了filepath.Glob函数,它可以根据通配符匹配符合条件的所有文件。

示例代码:

package main

import (
    "fmt"
    "path/filepath"
)

func main() {
    // 匹配当前目录下所有的txt文件
    files, err := filepath.Glob("./*.txt")
    if err != nil {
        fmt.Println(err)
    }
    for _, file := range files {
        fmt.Println(file)
    }
}

运行结果:

./test.txt

可以看到,该程序成功输出了当前目录下的所有txt文件路径。

方案三:使用filepath.Walk函数结合文件名过滤器实现筛选

结合方案一和方案二,我们可以自定义一个文件名过滤器函数,使用Walk函数遍历目录中的所有文件,并筛选符合条件的文件输出。

示例代码:

package main

import (
    "fmt"
    "os"
    "path/filepath"
    "strings"
)

func walkFunc(path string, info os.FileInfo, err error) error {
    if err != nil {
        // 错误处理
        return err
    }
    if !info.IsDir() && strings.Contains(path, ".txt") {
        // 处理符合条件的文件
        fmt.Println(path)
    }
    return nil
}

func main() {
    // 遍历当前目录下所有的txt文件路径
    root := "."
    err := filepath.Walk(root, walkFunc)
    if err != nil {
        fmt.Println(err)
    }
}

运行结果:

./test.txt

可以看到,该程序成功输出了当前目录中的所有txt文件路径。

结论

通过使用方案一、方案二和方案三中的方法,我们可以轻松实现对目录中文件的搜索和筛选功能。针对具体需求,可以选择不同的实现方式,方便快捷。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程