首页 > 代码库 > 扫描文件夹下代码行数

扫描文件夹下代码行数

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

  

扫描文件夹下代码行数