实现思路
我们的目标是创建一个GO语言程序,该程序将会实现以下功能:
- 从用户输入中读取一个文件夹路径。
- 遍历该文件夹及其子文件夹中的所有文件。
- 输出文件路径及其对应的文件大小。
为了实现以上功能,我们可以按照以下步骤进行:
1. 用户输入文件夹路径
我们可以使用GO语言的标准库中的bufio来获取用户输入的文件夹路径。这可以通过创建一个新的扫描器(scanner)并读取下一行来实现。
package main
import (
"bufio"
"fmt"
"os"
)
func main() {
scanner := bufio.NewScanner(os.Stdin)
fmt.Println("请输入文件夹路径:")
if scanner.Scan() {
folderPath := scanner.Text()
fmt.Println("您输入的文件夹路径是:", folderPath)
// 这里开始遍历文件夹和计算文件大小
}
}
2. 遍历文件夹及其子文件夹中的所有文件
在获取到用户输入的文件夹路径后,我们需要遍历该文件夹及其子文件夹中的所有文件。我们可以使用filepath.Walk函数来实现文件夹的遍历,并利用os.Stat函数获取文件的大小。
package main
import (
"os"
"path/filepath"
"fmt"
)
func main() {
// ...
err := filepath.Walk(folderPath, func(path string, info os.FileInfo, err error) error {
if err != nil {
println(err.Error())
return err
}
// 只处理文件
if !info.IsDir() {
fmt.Println("文件路径:", path)
fmt.Println("文件大小:", info.Size(), "字节")
}
return nil
})
if err != nil {
println(err.Error())
return
}
}
3. 输出文件路径及其对应的文件大小
在遍历文件夹中的每个文件时,我们可以通过调用os.Stat函数获取文件的大小,并打印输出文件路径及其对应的文件大小。
以上是一个基本的实现思路,下面是完整的代码示例:
package main
import (
"bufio"
"fmt"
"os"
"path/filepath"
)
func main() {
scanner := bufio.NewScanner(os.Stdin)
fmt.Println("请输入文件夹路径:")
if scanner.Scan() {
folderPath := scanner.Text()
fmt.Println("您输入的文件夹路径是:", folderPath)
err := filepath.Walk(folderPath, func(path string, info os.FileInfo, err error) error {
if err != nil {
println(err.Error())
return err
}
// 只处理文件
if !info.IsDir() {
fmt.Println("文件路径:", path)
fmt.Println("文件大小:", info.Size(), "字节")
}
return nil
})
if err != nil {
println(err.Error())
return
}
}
}
总结
通过上述步骤,我们成功实现了一个GO语言工程实践的课后作业。我们探讨了实现思路、编写代码,并记录了路径的方法。这个程序可以读取用户输入的文件夹路径,遍历该文件夹及其子文件夹中的所有文件,并输出每个文件的路径和文件大小。