代码行数统计的Java和Python实现
通过编写程序来统计文件的行数,可以在巩固文件IO知识的同时计算出自己的代码量,以下分别提供Java和Python实现的版本。
解决思路
两种版本的思路几乎相同,每一个文件夹(目录)内的行数都是其所有子文件夹或子文件的行数和,以此类推。即以类似于深度优先搜索的方法来递归遍历整个初始目录,遇到目录就继续向深一层搜索,遇到文件就判断是否为指定后缀的文件,如果是就通过读取文件计算其行数并不断累加。
Java实现
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
public class CountLine {
//计算顶层目录下所有指定文件的行数
public static int count(String root, String item) throws IOException {
return count(new File(root), item);
}
//计算某一路径下所有指定文件的行数
private static int count(File path, String item) throws IOException {
int sum = 0;
File[] list = path.listFiles();
if (list != null) {
for (File f : list) {
sum += count(f, item); //遇目录,递归
}
}
else { //遇文件,计算行数
if (path.getName().endsWith(item)) {
sum = countFileLine(path.getAbsolutePath());
}
}
return sum;
}
//计算文件行数
private static int countFileLine(String filename) throws IOException {
FileReader fr = null;
BufferedReader br = null;
int count = 0;
try {
fr = new FileReader(filename);
br = new BufferedReader(fr);
while (true) {
String s = br.readLine();
if (s == null) break;
count++;
}
} catch (IOException e) {
e.printStackTrace();
}
finally {
fr.close();
br.close();
}
return count;
}
public static void main(String[] args) throws IOException {
String root = "C:\\Users\\Administrator\\Desktop\\Code"; //指定初始目录
String item = ".java"; //指定文件后缀
int total = count(root, item);
System.out.println(total);
}
}
Python实现
需要注意的是利用Python统计时,需要统一文件的编码方式,否则在读取文件解码时会出现错误,最好统一为utf-8编码。关于批量实现文件转码的方法可参考 http://blog.csdn.net/zhayujie5200/article/details/78727677
import os
#计算文件行数
def count_file(file_name):
with open(file_name, 'r', encoding = 'utf-8') as f:
num = len(f.readlines())
return num
#统计该路径下文件行数
def count(path, item):
sum = 0 #当前路径(目录或文件)内的行数
if not os.path.isdir(path):
if os.path.splitext(path)[1] == item:
sum = count_file(path)
return sum
else:
for file_name in os.listdir(path):
sum += count(os.path.join(path, file_name), item)
return sum
if __name__ == '__main__':
root = 'C:\\Users\\Administrator\\Desktop\\Code'
item = '.py'
total_line = count(root, item)
print(total_line)
代码行数统计的Java和Python实现的更多相关文章
- java代码行数统计工具类
package com.syl.demo.test; import java.io.*; /** * java代码行数统计工具类 * Created by 孙义朗 on 2017/11/17 0017 ...
- Python实现代码行数统计工具
我们经常想要统计项目的代码行数,但是如果想统计功能比较完善可能就不是那么简单了, 今天我们来看一下如何用python来实现一个代码行统计工具. 思路:首先获取所有文件,然后统计每个文件中代码的行数,最 ...
- [转] 一句shell命令搞定代码行数统计
今天面试时,突然被面试官问到怎样用shell命令搞定某个文件夹下java代码行数的统计. 想了一下,基本思路就是找到这个文件夹下面的所有java文件,然后每个文件统计一下代码,外层套个for循环,叠加 ...
- Git代码行数统计命令
统计zhangsan在某个时间段内的git新增删除代码行数 git log --author=zhangsan--since=2018-01-01 --until=2019-04-01 --forma ...
- 【转】VS 代码行数统计
[转自]http://www.cnblogs.com/JuneZhang/archive/2013/01/10/2854572.html VS用正则表达式统计代码行数 利用VS2010的查找功能和正则 ...
- Android Studio代码行数统计插件Statistics
Android Studio 是没有提提供统计代码全部行数的功能的,但是对于开发者来说,这个功能确实必备的,Statistic统计代码行数非常方便,也很详细. 1,首先肯定是将插件下载下来,下载地址: ...
- 代码行数统计(mac)
如何统计自己的代码量?下面介绍两个方法: 一.cloc 1.首先,安装homebrew,已安装的请跳过. 打开终端工具Terminal,输入下列命令.过程中会让你按RETURN键以及输入mac桌面密码 ...
- 【Python】代码行数统计
两级目录,可扩展为N级. # Count the line of dir or file import os, fnmatch, fileinput def ChkFileType(lst): tmp ...
- GitLab代码行数统计--统计增加与删除行数
#!/bin/bashmaster_dev='master'date_star='2018-11-01'date_end='2018-11-30'path1=`find /home/gitlab_da ...
随机推荐
- Blazor WebAssembly 3.2.0 正式起飞,blazor 适合你吗?
最近blazor更新很快,今天在官方博客上发布了Blazor WebAssembly 3.2.0 RC:https://devblogs.microsoft.com/aspnet/blazor-web ...
- 计算5的n次幂html代码
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 墨仓式进入2.0时代?爱普生商用墨仓式L4158试用
提起"墨仓式"打印机,相信现在已经没有人需要过多的解释,墨仓式打印机在打印市场占有率不断提高就是最佳佐证.为什么用户对于墨仓式这么认可,想必是墨仓式真正洞悉了他们的需求,解决了打印 ...
- C# 基础知识系列- 14 IO篇 文件的操作 (3)
本篇继续前两篇内容,跟大家介绍一下Path类以及FileSystemInfo这个类的主要方法和属性. 上文提到,在<C# 基础知识系列-IO篇>之文件相关的内容完结之后,会带领大家开发一个 ...
- 图论-网络流-Dinic (邻接表版)
//RQ的板子真的很好用 #include<cstdio> #include<cstring> #include<queue> #define INF 1e9 us ...
- 一只简单的网络爬虫(基于linux C/C++)————守护进程
守护进程,也就是通常说的Daemon进程,是Linux中的后台服务进程.它是一个生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件.守护进程常常在系统引导装入时启动, ...
- 1 ThinkPHP框架初识
一.PHP主流框架介绍 主流的框架有laravel.symfony.thinkphp MVC和三层结构 MVC可以说是一种开发模式,三层结构是一种开发习惯,严格来讲,他们两者是完全不同的概念,但是在实 ...
- 使用Python+TensorFlow2构建基于卷积神经网络(CNN)的ECG心电信号识别分类(二)
心律失常数据库 目前,国际上公认的标准数据库包含四个,分别为美国麻省理工学院提供的MIT-BIH(Massachusetts Institute of Technology-Beth Israel H ...
- Z - New Year Tree CodeForces - 620E 线段树 区间种类 bitset
Z - New Year Tree CodeForces - 620E 这个题目还没有写,先想想思路,我觉得这个题目应该可以用bitset, 首先这个肯定是用dfs序把这个树转化成线段树,也就是二叉树 ...
- D - The Bakery CodeForces - 834D 线段树优化dp···
D - The Bakery CodeForces - 834D 这个题目好难啊,我理解了好久,都没有怎么理解好, 这种线段树优化dp,感觉还是很难的. 直接说思路吧,说不清楚就看代码吧. 这个题目转 ...