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; } }

      

  • 相关阅读:
    .NET中获取系统硬件信息
    TTF文件的制作——打造属于自己的字体
    HDU4415 Assassin’s Creed
    HDU4193 Nonnegative Partial Sums(单调队列)
    HDU4414 Finding crosses
    HDU4407 Sum
    HDU4403 A very hard Aoshu problem
    HDU4417 Super Mario
    HDU4419 Colourful Rectangle
    非递归快速排序和非递归快速乘幂
  • 原文地址:https://www.cnblogs.com/opensesame/p/6001452.html
Copyright © 2011-2022 走看看