Go 语言学习笔记-文件操作

2020-04-12  本文已影响0人  梁坤同学

打开、创建文件

写文件

读文件

删文件

  func Remove(name string) Error

调用该函数就可以删除文件名为 name 的文件

目录操作

使用案例:查询单词在目录中出现的次数

package main

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

func readFile(path, word string) int {
    fp, err := os.Open(path)
    if err != nil {
        fmt.Println("Open error: ", err)
    }
    defer fp.Close()

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

    for {
        buf, err := row.ReadBytes('\n')
        if err != nil && err == io.EOF {
            break
        }
        total += wordCount(string(buf[:]), word)
    }
    return total
}

func wordCount(s, word string) int {
    arr := strings.Fields(s)    //分割字符串,存入数组

    m := make(map[string]int)

    //对 arr 中的每个单词进行循环,存入 map 中统计
    for i := 0; i < len(arr); i++ {
        m[arr[i]] ++
    }

    for k, v := range m {
        if k == word {
            fmt.Printf("%s : %d\n", k, v)
            return m[k]
        }
    }
    return 0
}

//从一个文件中逐行读取内容,统计该文件共有多少个单词
func main() {
    fmt.Println("请输入需要查询的目录:")
    var path string     // 获取用户指定的目录名
    fmt.Scan(&path)
    fmt.Println("请输入需要查询的单词:")
    var word string     // 获取用户指定的单词
    fmt.Scan(&word)

    if !strings.HasSuffix(path, "/") {
        path += "/"
    }

    fileList, _ := ioutil.ReadDir(path)

    var allCount int = 0
    for _, fileInfo := range fileList {
        if !fileInfo.IsDir() {
            s := fileInfo.Name()
            if strings.HasSuffix(s, ".txt") {
                allCount += readFile(path + s, word)
            }
        }
    }
    fmt.Printf("目录所有文件中共有 %d 个 %s", allCount, word)
}

https://studygolang.com/pkgdoc

上一篇 下一篇

猜你喜欢

热点阅读