如何统计文件夹或者文件代码行数
代码
package main
import (
"bufio"
"fmt"
"io/ioutil"
"os"
"path/filepath"
"strings"
)
var (
sum int64
)
// 示例
// (1)交叉编译:
// (2)使用:./app.exe countline /d/projects/xxx go
func main() {
if len(os.Args) < 3 {
fmt.Println("countline [Dir] [extention]")
return
}
filepath.Walk(os.Args[2], func(path string, info os.FileInfo, err error) error {
if getExt(path) == os.Args[3] {
fmt.Println(path)
count := countLine(path)
fmt.Println("lines: ", count)
sum = sum + int64(count)
}
return nil
})
fmt.Println("total lines: ", sum)
}
//获取得文件的扩展名,最后一个.后面的内容
func getExt(f string) (ext string) {
// fmt.Println("ext:", f)
index := strings.LastIndex(f, ".")
data := []byte(f)
for i := index + 1; i < len(data); i++ {
ext = ext + string([]byte{data[i]})
}
return
}
func countFileLine(name string) (count int64, err error) {
fmt.Println("count file:", name)
data, err := ioutil.ReadFile(name)
if err != nil {
return
}
count = 0
for i := 0; i < len(data); i++ {
if data[i] == '\n' {
count++
}
}
fmt.Println("line:", count)
return
}
func countLine(fileName string) int {
file, err := os.Open(fileName)
if err != nil {
return 0
}
defer file.Close()
fd := bufio.NewReader(file)
count := 0
for {
_, err := fd.ReadString('\n')
if err != nil {
break
}
count++
}
fmt.Println(count)
return count
}
参考