Go语言使用之File工具类

说明:后续会继续补充此工具类。

一、方法说明

1、文件拷贝

//封装的文件拷贝方法
func CopyFile(dstName string, srcName string) (written int64, err error) {
    src, err := os.Open(srcName)
    CheckError(err)
    defer src.Close()
    dst, err := os.OpenFile(dstName, os.O_WRONLY|os.O_CREATE, 0644)
    CheckError(err)
    defer dst.Close()
    //拷贝文件
    return io.Copy(dst, src)
}

2、判断文件或者目录存在的方法

func PathExists(path string) (bool, error) {
    _, err := os.Stat(path)
    if err == nil { // 文件或者目录存在
        log.Fatal(err)
        return true, nil
    }
    if os.IsNotExist(err) {
        return false, nil
    }
    return false, err
}

3、获取文件信息

//获取文件信息
func GetFileInfo(file *os.File){
    //获取文件信息
    FileInfo, err :=file.Stat()
    CheckError(err)
    fmt.Println("FileInfo=",FileInfo)
    /*
    type FileInfo interface {
    Name() string       // 文件的名字(不含扩展名)
    Size() int64        // 普通文件返回值表示其大小;其他文件的返回值含义各系统不同
    Mode() FileMode     // 文件的模式位
    ModTime() time.Time // 文件的修改时间
    IsDir() bool        // 等价于Mode().IsDir()
    Sys() interface{}   // 底层数据来源(可以返回nil)
    }
    */
    fmt.Printf("Name=%v \nSize=%d \nMode= %v \nModTime=%v \nIsDir=%v \nSys=%v \n",
    FileInfo.Name(),FileInfo.Size(),FileInfo.Mode(),FileInfo.ModTime(),FileInfo.IsDir(),FileInfo.Sys())

}

4、字符统计:

type charCount struct {
    ChCount    int //英文
    NumCount   int //数字 
    SpaceCount int //空格
    OtherCount int //其它字符数量
}
//统计英文、数字、空格和其他字符数量
func CharCountImp(filePath string) {
    file, err := os.Open(filePath) //说明这里需要事先准备一个 c:/test.txt 文件来进行测试
    if err != nil {
        fmt.Println("read file err:", err)
        return
    }
    defer file.Close()

    var count charCount

    reader := bufio.NewReader(file)
    for {
        str, err := reader.ReadString('\n')
        if err == io.EOF {
            break
        }
        if err != nil {
            fmt.Printf("read file failed, err:%v", err)
            break
        }

        runeArr := []rune(str) //转成 []rune,可以处理中文字符
        for _, v := range runeArr {

            switch {
            case v >= 'a' && v <= 'z':
                fallthrough
            case v >= 'A' && v <= 'Z':
                count.ChCount++
            case v == ' ' || v == '\t':
                count.SpaceCount++
            case v >= '0' && v <= '9':
                count.NumCount++
            default:
                count.OtherCount++
            }
        }

    }

    fmt.Printf("char count:%d\n", count.ChCount)
    fmt.Printf("num count:%d\n", count.NumCount)
    fmt.Printf("space count:%d\n", count.SpaceCount)
    fmt.Printf("other count:%d\n", count.OtherCount)
}

二、完整代码:

package utils

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

//封装的文件拷贝方法
func CopyFile(dstName string, srcName string) (written int64, err error) {
    src, err := os.Open(srcName)
    CheckError(err)
    defer src.Close()
    dst, err := os.OpenFile(dstName, os.O_WRONLY|os.O_CREATE, 0644)
    CheckError(err)
    defer dst.Close()
    //拷贝文件
    return io.Copy(dst, src)
}

//判断文件或者目录存在的方法
func PathExists(path string) (bool, error) {
    _, err := os.Stat(path)
    if err == nil { // 文件或者目录存在
        log.Fatal(err)
        return true, nil
    }
    if os.IsNotExist(err) {
        return false, nil
    }
    return false, err
}
//获取文件信息
func GetFileInfo(file *os.File){
    //获取文件信息
    FileInfo, err :=file.Stat()
    CheckError(err)
    fmt.Println("FileInfo=",FileInfo)
    /*
    type FileInfo interface {
    Name() string       // 文件的名字(不含扩展名)
    Size() int64        // 普通文件返回值表示其大小;其他文件的返回值含义各系统不同
    Mode() FileMode     // 文件的模式位
    ModTime() time.Time // 文件的修改时间
    IsDir() bool        // 等价于Mode().IsDir()
    Sys() interface{}   // 底层数据来源(可以返回nil)
    }
    */
    fmt.Printf("Name=%v \nSize=%d \nMode= %v \nModTime=%v \nIsDir=%v \nSys=%v \n",
    FileInfo.Name(),FileInfo.Size(),FileInfo.Mode(),FileInfo.ModTime(),FileInfo.IsDir(),FileInfo.Sys())

}
//错误检查
func CheckError(err error) {
    if err != nil {
        log.Fatal(err)
        // panic(err)
    }
}

type charCount struct {
    ChCount    int //英文
    NumCount   int //数字 
    SpaceCount int //空格
    OtherCount int //其它字符数量
}
//统计英文、数字、空格和其他字符数量
func CharCountImp(filePath string) {
    file, err := os.Open(filePath) //说明这里需要事先准备一个 c:/test.txt 文件来进行测试
    if err != nil {
        fmt.Println("read file err:", err)
        return
    }
    defer file.Close()

    var count charCount

    reader := bufio.NewReader(file)
    for {
        str, err := reader.ReadString('\n')
        if err == io.EOF {
            break
        }
        if err != nil {
            fmt.Printf("read file failed, err:%v", err)
            break
        }

        runeArr := []rune(str) //转成 []rune,可以处理中文字符
        for _, v := range runeArr {

            switch {
            case v >= 'a' && v <= 'z':
                fallthrough
            case v >= 'A' && v <= 'Z':
                count.ChCount++
            case v == ' ' || v == '\t':
                count.SpaceCount++
            case v >= '0' && v <= '9':
                count.NumCount++
            default:
                count.OtherCount++
            }
        }

    }

    fmt.Printf("char count:%d\n", count.ChCount)
    fmt.Printf("num count:%d\n", count.NumCount)
    fmt.Printf("space count:%d\n", count.SpaceCount)
    fmt.Printf("other count:%d\n", count.OtherCount)
}

猜你喜欢

转载自blog.csdn.net/TDCQZD/article/details/81835375