码迷,mamicode.com
首页 > 其他好文 > 详细

扫描文件夹下代码行数

时间:2016-10-26 19:41:15      阅读:115      评论:0      收藏:0      [点我收藏+]

标签:div   rac   自己实现   支持   提交   buffer   str   utf-8   兴趣   

突发奇想,     想知道项目里有多少行代码。花了一点时间写了个初步的demo,原理很简单,扫描项目src目录,拿到所有的文件按行读取,每读取一行,累计加1。

难      点:    如何跳过目录以及获得目录下的文件和下一级目录,这里用递归比较好。

不足之处:    不支持识别注释,不支持识别代码提交者,不支持时间分类,文件类型分类,不支持总字符统计。

改进方式:   单行注释比较容易,trim一下判断是否以 // 开头,或者用正则匹配一下,多行就有点麻烦了,可能要读取整个文件内容,然后通过正则匹配/***/和/**/内容,其他功能都不是很难,有兴趣的同学可以自己实现一下。

代     码:

public class ScanMain {
    public static void main(String[] args) {

        int codeLine = 0;
        //代码扫描路径
        String scanPath = "F:\\ProtocolConvert\\src";

        File rootFile = new File(scanPath);
// 这里其实不必初始化,方法全部写成static的就行了,此处是之前设置了全局变量没来得及改 ScanMain sm = new ScanMain(); List<File> files = new ArrayList<>(); files = sm.scan(getAllFiles(rootFile),files); System.out.println(files.size()); for(File fn :files){ codeLine+=sm.countCode(fn); } System.out.println(codeLine); } //按行读取文件,并累计行数 public int countCode(File file){ int i = 0; try { InputStreamReader read = new InputStreamReader( new FileInputStream(file),"UTF-8");//考虑到编码格式 BufferedReader bufferedReader = new BufferedReader(read); String line=""; while((line = bufferedReader.readLine())!=null){ i++; } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return i; } //这一步好像多此一举了。 public static File[] getAllFiles(File f){ File[] files = f.listFiles(); return files; } //使用递归方式扫描文件夹,所有目录向下继续查找,所有文件存入result中。 public List<File> scan(File[] files,List<File> result){ for(File fn : files){ if(fn.isDirectory()){ scan(fn.listFiles(),result); }else{ System.out.println("shi"); result.add(fn); } } return result; } }

  

扫描文件夹下代码行数

标签:div   rac   自己实现   支持   提交   buffer   str   utf-8   兴趣   

原文地址:http://www.cnblogs.com/opensesame/p/6001452.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!