Golang 获取目录中的所有文件
Golang拥有一些OS包,例如OS.open()、os.closs()、os.copy(),以及用于执行与外部文件相关的不同操作的其他包。同样,在Golang中我们也有io包,用于对外部文件执行读取和写入操作。在本文中,我们将使用这两个包来打印给定目录中的所有文件。
方法1:使用OS包
该程序使用os包打开提供的目录并使用其内容。通过Readdir函数返回一系列os.FileInfo对象,在目录中返回有关每个文件的详细信息。在Name方法返回文件名后,将打印文件的名称。
语法
Os.Open()
这个函数是os包的一部分。它用于打开一个文件进行读取。它接受一个输入参数,即要打开的文件名。
步骤
- 步骤1 - 在main包中创建一个程序,并声明fmt(格式化包)和os包。fmt用于格式化输入和输出,os用于生成可执行代码。
-
步骤2 - 将要访问的文件夹赋给一个变量。
-
步骤3 - 使用os.Open函数打开文件夹。
-
步骤4 - 如果在打开文件夹过程中出现任何错误,则打印错误信息并返回。
-
步骤5 - 使用defer关键字和close函数关闭已打开的文件。
-
步骤6 - 使用Readdir函数读取文件夹中的文件,如果在读取过程中出现错误,则打印错误信息并返回。
-
步骤7 - 使用fmt.Println()循环打印从文件夹中读取的文件到控制台。
示例
在这个示例中,我们将使用Readdir函数读取文件夹并打印文件。
package main
import (
"fmt"
"os"
)
func main() {
directory := "./" // The current directory
files, err := os.Open(directory) //open the directory to read files in the directory
if err != nil {
fmt.Println("error opening directory:", err) //print error if directory is not opened
return
}
defer files.Close() //close the directory opened
fileInfos, err := files.Readdir(-1) //read the files from the directory
if err != nil {
fmt.Println("error reading directory:", err) //if directory is not read properly print error message
return
}
for _, fileInfos := range fileInfos {
fmt.Println(fileInfos.Name()) //print the files from directory
}
}
输出
.cache
main.go
方法2:使用io/ioutil包
此方法使用ioutil包中的ReadDir函数来读取目录的内容,并返回一个os.FileInfo对象的片段。程序然后遍历这个片段,并像前面的示例一样使用Name方法打印每个文件的名称。
语法
Ioutil.ReadDir()
这个函数位于ioutil包中,用于读取当前工作文件所在的目录。它只有一个参数,即当前目录的位置。
步骤
- 第1步 - 在主包中创建一个包main,并在程序中声明fmt(格式化包)、io/ioutil包,其中main用于生成可执行代码,fmt用于格式化输入和输出。
-
第2步 - 创建一个目录变量,并为其指定要访问文件的目录。
-
第3步 - 使用ioutil包中的ReadDir函数来读取目录中的文件。
-
第4步 - 如果在读取目录中的文件时出现错误,则打印错误并返回。
-
第5步 - 如果没有错误,则使用fmt.Println()打印目录中的文件。
示例
在这个示例中,我们将使用io/ioutil包的ioutil.ReadDir函数来获取目录中的文件。
package main
import (
"fmt"
"io/ioutil"
)
func main() {
directory := "./" // The current directory
files, err := ioutil.ReadDir(directory) //read the files from the directory
if err != nil {
fmt.Println("error reading directory:", err) //print error if directory is not read properly
return
}
for _, file := range files {
fmt.Println(file.Name()) //print the files from the directory
}
}
输出
.cache
main.go
结论
我们执行了一个程序,使用两个示例获取目录中存在的所有文件。在第一个示例中,我们将使用os包函数,在第二个示例中,我们将使用io/ioutil包函数来执行该程序。