Go语言程序:获取目录下所有文件
Go语言拥有`os`包,例如`os.Open()`、`os.Close()`、`os.Copy()`和`os.Rename()`等函数,用于执行不同的外部文件操作。类似地,Go语言也拥有`io`包,用于执行外部文件的读写操作。本文将使用这两个包来打印给定目录中的所有文件。
方法一:使用`os`包
此程序打开提供的目录并使用`os`包读取其内容。`Readdir`函数返回一个`os.FileInfo`对象的切片,其中包含有关目录中每个文件的详细信息。`Name`方法返回文件名后,程序会打印该文件名。
语法
Os.Open()
此函数是`os`包的一部分,用于打开文件以进行读取。它接受一个输入,即要打开的文件名。
算法
步骤 1 − 创建`main`包并声明`fmt`(格式化包)、`os`包。`main`包生成可执行代码,`fmt`包帮助格式化输入和输出。
步骤 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
方法二:使用`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`包函数来执行程序。