统计 某路径下 某些指定文件中 指定字符串出现的次数
import (
"github.com/axgle/mahonia"
)
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
}
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
}
查询目录下文件
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
}
移动文件
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
}