zoukankan      html  css  js  c++  java
  • 扫描文件夹下代码行数

    突发奇想,     想知道项目里有多少行代码。花了一点时间写了个初步的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; } }

      

  • 相关阅读:
    搞清楚C#中的值类型(基础类型)和引用类型
    构造动态SQL语句
    Json.net API及常用方法
    泛型代码中的default有何作用
    SQL 中的for xml path()的使用
    fastJosn和JackJson的区别
    箭头函数
    3篇文章初探MVC工作流程
    MVC传递Model之TempData、ViewData、ViewBag区别和用途
    .Net 提交页面,js修改的Label值会丢掉
  • 原文地址:https://www.cnblogs.com/opensesame/p/6001452.html
Copyright © 2011-2022 走看看