Golang程序 用于获取一个目录中的所有文件
Golang有一些操作系统包,如OS.open(), os.closs(), os.copy()以及更多用于对外部文件进行不同的操作。同时,我们在Golang中还有io包,用于对外部文件进行读写操作。在这篇文章中,我们将使用这两个包来打印指定目录下的所有文件。
方法1:使用操作系统包
这个程序打开所提供的目录并使用os包读取其内容。返回一片os.FileInfo对象,这些对象由Readdir函数返回,包括目录中每个文件的详细信息。文件的名称在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
}
}
输出
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
}
}
输出
main.go
结论
我们用两个例子执行了获取一个目录中的所有文件的程序。在第一个例子中,我们将使用os包函数,在第二个例子中,我们将使用io/ioutil包函数来执行该程序。