Home » Go » Go语言统计指定目录内Love个数

Go语言统计指定目录内Love个数

编 辑:Y ┊ 时 间:2023年01月09日 ┊ 访问: 18 次

Go语言统计指定目录内Love个数

package main

import (
    "strings"
    "fmt"
    "os"
    "bufio"
    "io"
)

// 从一个文件中逐行读取内容,统计该文件共有多少个 love
func readFile(fileName string) int  {
    fp, err := os.Open(fileName)
    if err !=nil{
        fmt.Println("Open err:", err)
        return -1
    }
    defer fp.Close()

    row := bufio.NewReader(fp)    // 创建一个reader
    var total int = 0            // 统计 Love 总数的变量

    for {    // 循环 按行读取文件内容,存入buf中
        buf, err :=row.ReadBytes('\n')
        if err != nil && err == io.EOF {
            break
        }
        // 交给 wordCount 统计每行中 love 出现的次数。累加各行 love 数
        total += wordCount(string(buf[:]))
    }
    return total
}

// 从一行字符串中获取 love 出现的次数。将该次数返回。
func wordCount(s string) int {
    arr := strings.Fields(s)            // 分割字符串,存入字符数组
    m := make(map[string]int)            // 创建map

    // 对arr中的每个单词进行循环,存入map中,统计
    for i:= 0; i<len(arr); i++ {
        m[arr[i]]++
    }
    // 统计 map 中一共有多少个 "Love"
    for k, v := range m {
        if k == "love" {
            fmt.Printf("%s : %d\n", k, v)
            return m[k]            // 返回 Love 出现的次数
        }
    }
    return 0        // 没有Love, 返回 0
}

func main()  {
/*    // 测试从文件读一行
    oneFilenum := readFile("C:/itcast/test2/test.txt")
    fmt.Printf("一个文件中有:%d 个Love\n", oneFilenum)

    writeString
*/

    fmt.Println("请输入要找寻的目录:")
    var path string
    fmt.Scan(&path)                        // 获取用户指定的目录名

    dir, _ := os.OpenFile(path, os.O_RDONLY, os.ModeDir)    // 只读打开该目录
    defer dir.Close()

    names, _ := dir.Readdir(-1)        // 读取当前目录下所有的文件名和目录名,存入names切片

    var AllLove int = 0
    for _, name := range names {        // 遍历切片,获取文件/目录名
        if !name.IsDir() {
            s := name.Name()            // 文件名不包含路径。
            if strings.HasSuffix(s,".txt") {
                AllLove += readFile(path + s)        // 拼接有路径的文件名(绝对路径)
            }
        }
    }
    fmt.Printf("目录所有文件中共有 %d 个Love\n", AllLove)
}



Copyright © 2026 Y 版权所有.网站运行:13年238天21小时26分