在学校的时候就想写一个代码行数统计的程序,可由于各种原因一直没有实现。年前在北京参加了一个培训,培训过程中,自己抽空完成了一个简单的代码行数统计程序。近期接触一个新项目的时候本想看看该项目的代码总数,可一时找不到原来的那个代码行数统计程序了。问了两个朋友,他们也没有。于是我又萌生了重写该程序的念头。
前几天,我抽出一些空闲的时间,完成了该程序的核心功能。我又在接下来的几天里抽空对代码进行了完善。
想想该程序,难点应该主要有三个。
其一:如何统计一个文件的代码行数
其二:如何过滤指定类型的文件
其三:如何遍历文件夹
针对这三个难点,我用了下面的方法来解决它们。
一、 定义一个变量n用于记录文件的代码行数,初始值为0 。构造一个BufferedReader对象用于按行读取文件。读取文件的过程中,改变n的值。这样当读到文件尾部的时候,该文件的总行数也就出来了。核心代码如下:
int n = 0;
BufferedReader br = new BufferedReader(new FileReader(fileName));
while ((br.readLine()) != null)
{
n++;
}
二、 定义一个SimpleFileFilter类并实现FileFilter接口,重写该接口的方法public boolean accept(File pathname) 。在该类中定义一些常量,用于表示一些常用文件的类型。然后定义一个List<String>,名字为suffixes,用于保存需要过滤的文件类型。核心代码如下:
for (String suffix : suffixes)
{
if (pathname.getName().toLowerCase().endsWith(suffix))
{
return true;
}
}
return false;
三、 利用递归的思想来解决遍历文件夹的问题。核心代码如下:
private void getTotalLineNumberOfPath(File f)
{
File[] files = f.listFiles();
for (int i = 0; i < files.length; i++)
{
if (files[i].isFile())
{
//统计该文件的代码行数,请参考难点一
}else
{
getTotalLineNumberOfPath(files[i]);
}
}
}
写此文主要目的有两个:一、备忘;二、分享心得。如有不妥之处,欢迎拍砖!
重要提示:我把程序源码上传到个人资源里面了,如有需要请点击(代码行数统计程序:http://download.csdn.net/detail/binbinxyz/4078590)下载参考!