count-file-lines

命令行统计文件行数

Linux 统计代码行数

在 Linux 下这是一件很简单的事情:

1
2
3
find . -name "*.py" | wc -l

find ./ -name "*.py" |xargs cat|grep -v ^$|wc -l

这行语句就可以很简单地统计出当前目录下所有py后缀文件的行数了。

Windows 统计代码行数

这时我们就不能用cmd而是应当用PowerShell啦。

Powershell是Windows基于.NET开发的一个自动化配置框架。 (其实就是新版命令行)

然后我们可以输入:

1
2
dir .\ -Recurse *.py | Get-Content | 
Measure-Object

我们就可以看到输出:

Count : 577966
表示当前目录下py后缀文件一共有577966行。

Java实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
import java.io.*;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

/**
* Created by 杨华彬 on 2016/12/19.
*/
public class Main {

public static void main(String[] args) {
//输入路径,请在括号内输入路径。
File f = new File("D:\\程序文件\\IntelliJ IDEA\\Java\\JnaTest");
Map map = new HashMap<String, Integer>(); //用来存放统计出来的行数
Plus(f, map);
//输出统计的结果
getResult(map);
}

/*
遍历文件夹
*/
public static void Plus(File f, Map map) {

File[] files = f.listFiles();//获取传入路径的所有文件


//遍历这些文件,需求是CVS中的不统计,所以加判断

for (File a : files) {
//如果文件名是CVS的就跳过
if (a.getName().equals("CVS")) {
continue;
} else {
//如果a是文件的话就进入下一级目录,否则就统计行数
if (a.isDirectory()) {
Plus(a, map);
} else {
// if (a.getName().endsWith(".java"))
map = lineNumber(a.getAbsolutePath(), map); //否者调方法统计行数
}
}
}


}

/*
统计相应文件的行数
*/
public static Map<String, Integer> lineNumber(String f, Map map) {
//定义字符流读取文件
FileReader fileReader = null;
try {
fileReader = new FileReader(f);
} catch (IOException e) {
e.printStackTrace();
System.out.println("输入的路径不正确");
}

BufferedReader bufferedReader = new BufferedReader(fileReader); //从字节流中升级为字符流,方便按行读取。
int index = 0;


try {
while (bufferedReader.readLine() != null) {
index++;
}
map.put(f, index); //将结果放到map中


} catch (IOException e) {
e.printStackTrace();
System.out.println("这个文件读不到!");
} finally {
if (fileReader != null) {
try {
fileReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return map;
}
}

/*
将文件的行数存放在一个map中,然后输出行数的和
*/
public static void getResult(Map map) {
int sum = 0;
//使用iterator遍历map集合
Iterator<Map.Entry<String, Integer>> entries =
map.entrySet().iterator();

while (entries.hasNext()) {
Map.Entry<String, Integer> entry = entries.next();
System.out.printf("%5d - %s\n", entry.getValue(), entry.getKey());
sum += entry.getValue();
}

System.out.println("line num:" + sum);

}
}

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×