Golang 获取指定目录中文件的名称列表
在 Golang 中,我们有两个内部函数 – ReadDir() 和 Walk() 函数用于获取特定目录中的文件名列表。这里我们写了三个示例。在第一个示例中,我们将使用 ioutil 包中的 ReadDir() 函数,而在第二个示例中,我们使用 filepath 包中的 walk() 函数。
方法 1: 使用 ioutil 包
在 Golang 中,ioutil 包提供了几个函数来执行输入/输出操作,包括读取文件和目录。ioutil 包的 ReadDir() 函数用于获取指定目录中的文件列表。
语法
func ReadDir(dirname string) ([]os.FileInfo, error)
ReadDir()函数以目录名作为参数,并返回一个包含os.FileInfo的切片和一个错误(如果有的话)。os.FileInfo接口提供有关文件或目录的信息,包括其名称、大小和时间戳。
步骤
- 在您的Go程序中导入ioutil包。
-
调用ioutil.ReadDir()函数,将目录路径作为参数传递。
-
ReadDir()函数将返回一个包含os.FileInfo对象的切片,每个对象代表指定目录中的一个文件或目录。
-
循环遍历os.FileInfo对象的切片,并打印文件的名称。
示例
在此示例中,我们将使用Golang的ioutil包获取指定目录中文件的名称列表。
package main
import (
"fmt"
"io/ioutil"
)
func main() {
files, err := ioutil.ReadDir(".")
if err != nil {
fmt.Println("Error:", err)
return
}
for _, file := range files {
fmt.Println(file.Name())
}
}
输出
.cache
main.go
方法2:使用OS PACKAGE
在Golang中,os包提供了多个函数来执行操作系统操作,包括读取文件和目录。os包的Readdir()函数用于获取指定目录中的文件列表。
语法
func Readdir(dirname string) ([]os.FileInfo, error)
Readdir()函数将目录名作为参数,并返回os.FileInfo的切片和任何错误。
步骤
- 在您的Go程序中导入fmt和os包。
-
调用os.Open()函数,将目录的路径作为参数传递。
-
Open()函数返回表示打开的目录的os.File对象的指针。
-
在os.File对象上调用Readdir()函数,它返回os.FileInfo对象的切片,每个对象表示指定目录中的文件或目录。
-
循环遍历os.FileInfo对象的切片并打印文件的名称。
示例
在此示例中,我们使用os.Open()函数打开当前目录(用“.”表示),并使用os.File.Readdir()方法获取文件列表。然后使用返回的os.FileInfo的切片,通过每个os.FileInfo的Name()方法来打印文件名。
package main
import (
"fmt"
"os"
)
func main() {
dir, err := os.Open(".")
if err != nil {
fmt.Println("Error:", err)
return
}
defer dir.Close()
files, err := dir.Readdir(-1)
if err != nil {
fmt.Println("Error:", err)
return
}
for _, file := range files {
fmt.Println(file.Name())
}
}
输出
.cache
main.go
方法3:使用Filepath包
在Golang中,filepath包提供了几个函数来执行与文件路径相关的操作,包括读取文件和目录。filepath包的Walk()函数用于获取指定目录中的文件列表。
语法
func Walk(root string, walkFn WalkFunc) error
Walk()函数接受根目录名称和回调函数(WalkFunc)作为参数。WalkFunc函数会对根目录及其包含的每个文件或目录进行调用。WalkFunc的异常返回值会传递回调用链。
步骤
- 导入你的Go程序中的filepath和fmt包。
-
定义一个类型为filepath.WalkFunc的回调函数,该回调函数会对根目录及其包含的每个文件或目录进行调用。
-
调用filepath.Walk()函数,将根目录名称和回调函数作为参数传递进去。
-
Walk()函数遍历以根目录为根的树,在树中的每个文件或目录都会调用回调函数。
-
在回调函数中,如果文件不是目录,则打印文件名。
-
WalkFunc的异常返回值会传递回调用链。检查在Walk()函数期间可能发生的任何错误。
示例
在此示例中,我们使用filepath.Walk()函数遍历当前目录(由“.”表示)。回调函数会对树中的每个文件和目录进行调用,只有文件的名称会被打印出来。
package main
import (
"fmt"
"path/filepath"
"os"
)
func main() {
err := filepath.Walk(".", func(path string, info os.FileInfo, err error) error {
if !info.IsDir() {
fmt.Println(info.Name())
}
return nil
})
if err != nil {
fmt.Println("Error:", err)
return
}
}
输出
0e2b514f755ee4f625d64cbbd7c2105ede7801c584c4b7c84ab92a6bba8bead3-a
488f59492c5d2acb89df6f7dd4adeb489e794f4c7f4b7099b1ce8bfd4bb76555-d
491a6fde5177b15e27e5483d63c5275ef3fb4d1160e2f0250593f0500e3ffa42-d
README
c1e4b74d07dece466552274a8aaf6ea8cbe8b38326ab63779edc68c311125873-a
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855-d
ef52495a5cadbbe9f3a90c71303222f26f455e79cdb1e4a5bd23c6d0fd037dfa-a
f93942f3d6be608e81b2d3c28c3ed57f5c78c1367b8844742d977252fc2921e2-a
main.go
结论
总之,Golang 提供了几种方法来获取指定目录中文件名的列表,包括使用 ioutil 包、os 包和 filepath 包。每种方法都有自己的语法、用例和算法,选择方法取决于特定任务的需求。无论您需要执行简单的目录列表还是遍历整个目录树,Golang 都具备高效、有效地完成任务所需的工具。