golang实战小练习

统计 某路径下 某些指定文件中 指定字符串出现的次数
// 用到的外部库
import (
	"github.com/axgle/mahonia"
)
// AllFileTextNum 统计 某路径下 某些指定文件中 指定字符串出现的次数
// dir string 指定查询路径
// sixs []string 指定查询的后缀
// text string 指定统计字符串
// return(指定字符串出现的次数 int, 错误处理 error)
func AllFileTextNum(dir string,sixs []string,text string) (int,error){
	num := 0
	list,err := GetPathFile(dir,sixs)
	if err != nil{ return num,err }
	for _,filename := range list{
		onefile,err := OneFileTextNum(dir+"\\"+filename,text)
		if err != nil{ return num,err }
		num += onefile
	}
	return num,nil
}

// OneFileTextNum 统计文件中 某个字符串 出现的次数
// path string 指定文件路径
// text string 指定统计字符串
// return(指定字符串出现的次数 int, 错误处理 error)
func OneFileTextNum(path,text string) (int,error) {
	num := 0
	//打开
	f,err := os.Open(path)
	if err != nil{ return num,err }
	defer f.Close()
	//按行读
	reader := bufio.NewReader(f)
	for{
		line,err :=reader.ReadBytes('\n')
		if err != nil && err == io.EOF{ break }
		gbkline := mahonia.NewDecoder("gbk").ConvertString(string(line))
		num += strings.Count(gbkline,text)
	}
	return num,nil
}
查询目录下文件
// GetPathFile 查询目录下文件
// dir string 指定查询路径
// sixs []string 指定查询的后缀
// return(文件名称 []string, 异常处理 error)
func GetPathFile(dir string,sixs []string) ([]string,error)  {
	jpglist := make([]string,0)
	f,err := os.OpenFile(dir,os.O_RDONLY,os.ModeDir)
	if err != nil{
		return jpglist,err
	}
	defer f.Close()
	DirFiles,err := f.Readdir(-1)
	if err != nil{
		return jpglist,err
	}
	for _,item := range DirFiles{
		if !item.IsDir(){
			FileName := item.Name()
			FileSix := path.Ext(FileName)
			for _,six:=range sixs{
				if six == FileSix{
					jpglist = append(jpglist, FileName)
					break
				}
			}
		}
	}
	return jpglist,nil
}
移动文件
// FileMove 移动文件
// path string 文件路径
// npath string 目标文件路径
// return(异常处理 error)
func FileMove(path,npath string) (error){
	//打开
	f,err := os.Open(path)
	if err != nil{ return err }
	defer f.Close()
	//创
	cf,err := os.Create(npath)
	if err != nil{ return err }
	defer cf.Close()
	//读
	temp:=make([]byte,4096)
	for{
		rf,err := f.Read(temp)
		if err != nil && err == io.EOF{
			break
		}
		//写
		_,err = cf.Write(temp[:rf])
		if err != nil{ return err }
	}
	return nil
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

rock__rabbit

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值