通过编写程序来统计文件的行数,可以在巩固文件IO知识的同时计算出自己的代码量,以下分别提供JavaPython实现的版本。

解决思路

两种版本的思路几乎相同,每一个文件夹(目录)内的行数都是其所有子文件夹子文件的行数和,以此类推。即以类似于深度优先搜索的方法来递归遍历整个初始目录,遇到目录就继续向深一层搜索,遇到文件就判断是否为指定后缀的文件,如果是就通过读取文件计算其行数并不断累加。

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实现的更多相关文章

  1. java代码行数统计工具类

    package com.syl.demo.test; import java.io.*; /** * java代码行数统计工具类 * Created by 孙义朗 on 2017/11/17 0017 ...

  2. Python实现代码行数统计工具

    我们经常想要统计项目的代码行数,但是如果想统计功能比较完善可能就不是那么简单了, 今天我们来看一下如何用python来实现一个代码行统计工具. 思路:首先获取所有文件,然后统计每个文件中代码的行数,最 ...

  3. [转] 一句shell命令搞定代码行数统计

    今天面试时,突然被面试官问到怎样用shell命令搞定某个文件夹下java代码行数的统计. 想了一下,基本思路就是找到这个文件夹下面的所有java文件,然后每个文件统计一下代码,外层套个for循环,叠加 ...

  4. Git代码行数统计命令

    统计zhangsan在某个时间段内的git新增删除代码行数 git log --author=zhangsan--since=2018-01-01 --until=2019-04-01 --forma ...

  5. 【转】VS 代码行数统计

    [转自]http://www.cnblogs.com/JuneZhang/archive/2013/01/10/2854572.html VS用正则表达式统计代码行数 利用VS2010的查找功能和正则 ...

  6. Android Studio代码行数统计插件Statistics

    Android Studio 是没有提提供统计代码全部行数的功能的,但是对于开发者来说,这个功能确实必备的,Statistic统计代码行数非常方便,也很详细. 1,首先肯定是将插件下载下来,下载地址: ...

  7. 代码行数统计(mac)

    如何统计自己的代码量?下面介绍两个方法: 一.cloc 1.首先,安装homebrew,已安装的请跳过. 打开终端工具Terminal,输入下列命令.过程中会让你按RETURN键以及输入mac桌面密码 ...

  8. 【Python】代码行数统计

    两级目录,可扩展为N级. # Count the line of dir or file import os, fnmatch, fileinput def ChkFileType(lst): tmp ...

  9. GitLab代码行数统计--统计增加与删除行数

    #!/bin/bashmaster_dev='master'date_star='2018-11-01'date_end='2018-11-30'path1=`find /home/gitlab_da ...

随机推荐

  1. Spring Boot filter

    在Spring Boot中自定义filter 本文我们将会讲解如何在Spring Boot中自定义filter并指定执行顺序. 定义Filter很简单,我们只需要实现Filter接口即可,同时我们可指 ...

  2. JDK13的六大重要新特性

    文章目录 JDK13的六大重要特性 支持Unicode 12.1 动态CDS归档(Dynamic CDS Archiving) java.net.Socket和java.net.ServerSocke ...

  3. 即将进行论文答辩的我发现MyEclipse 2016 激活过期害得我又一次把 MyEclipse 2016 给重新激活注册,详细的图文解说激活过程

    背景: 在家美滋滋的上着网课享受着因为疫情带来的平静,没想到随着微信.钉钉铃声响起打破了我半年以来的平静的生活:通知我们过完劳动节要进行答辩,由于我的答辩项目是由 MyEclipse 这个工具编写的我 ...

  4. web前端开发中的各种居中

    居中是我们使用css来布局时常遇到的情况.使用css来进行居中时,有时一个属性就能搞定,有时则需要一定的技巧才能兼容到所有浏览器,本文就居中的一些常用方法做个简单的介绍. 注:本文所讲方法除了特别说明 ...

  5. mac OS 安装配置 Tomcat

    Apache Tomcat官网 http://tomcat.apache.org/ 选择一个版本 本文以tomcat 9为例 选择Mac OS 对应的压缩包下载 把文件解压然后  在主用户里新建一个目 ...

  6. Process Synchronization-Example 1

    问题描述 把学生和监考老师都看作进程,学生有N人,教师1人.考场门口每次只能进出一个人,进考场原则是先来先进.当N个学生都进入考场后,教师才能发卷子.学生交卷后可以离开考场,教师要等收上来全部卷子并封 ...

  7. 小白,你要的Java抽象类,操碎了心!

    自从给小白写了两篇科普性质的文章后,我就有点一发不可收拾,觉得很有必要继续写下去.因为有读者留言"鼓励"我说,"二哥,你真的是为小白操碎了心啊!"我容易吗?我. ...

  8. thinkphp 5.x~3.x 文件包含漏洞分析

    漏洞描述: ThinkPHP在加载模版解析变量时存在变量覆盖的问题,且没有对 $cacheFile 进行相应的消毒处理,导致模板文件的路径可以被覆盖,从而导致任意文件包含漏洞的发生. 主要还是变量覆盖 ...

  9. 如何使用Golang实现一个API网关

    你是否也存在过这样的需求,想要公开一个接口到网络上.但是还得加点权限,否则被人乱调用就不好了.这个权限验证的过程,最好越简单越好,可能只是对比两个字符串相等就够了.一般情况下我们遇到这种需要,就是在函 ...

  10. 博客第一天:Typora和Markown语法初始

    ------------恢复内容开始------------ Markdown学习 一级标题:#+空格 二级标题:##+空格 三级标题:###+空格 四级标题:####+空格 五级标题:#####+空 ...