命令行统计文件行数
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;
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();
for (File a : files) { if (a.getName().equals("CVS")) { continue; } else { if (a.isDirectory()) { Plus(a, map); } else {
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);
} catch (IOException e) { e.printStackTrace(); System.out.println("这个文件读不到!"); } finally { if (fileReader != null) { try { fileReader.close(); } catch (IOException e) { e.printStackTrace(); } } return map; } }
public static void getResult(Map map) { int sum = 0; 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);
} }
|