• 扫描文件夹下代码行数


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

      

  • 相关阅读:
    手写DAO框架(六)-框架使用示例
    手写DAO框架(五)-DAO层实现
    堵车时如何快速行车
    win10如何安装mariadb
    工程开发中的“事务”
    通过网页或者移动设备链接跳转qq(tim)添加好友(群)
    通过网页或者移动设备链接跳转qq(tim)添加好友(群)
    蓝桥杯历届真题,算法学习讨论群(互相学习,多交流才能进步)
    项目的登录注册如何用邮箱发送验证码
    项目的登录注册如何用邮箱发送验证码
  • 原文地址:https://www.cnblogs.com/opensesame/p/6001452.html
Copyright © 2020-2023  润新知