扫描文件夹下代码行数

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

  

时间: 2024-12-28 23:02:13

扫描文件夹下代码行数的相关文章

【原】Mac下统计任意文件夹中代码行数的工具——cloc

这里介绍一个Mac系统统计代码行数的工具cloc. 1.首先,安装homebrew,已安装的请跳过. 打开终端工具Terminal,输入下列命令.过程中会让你按RETURN键以及输入mac桌面密码,按照提示进行操作即可: ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 2.利用homebrew下载并安装cloc. 继续在Terminal中输入: brew

Java关于条件判断练习--统计一个src文件下的所有.java文件内的代码行数(注释行、空白行不统计在内)

要求:统计一个src文件下的所有.java文件内的代码行数(注释行.空白行不统计在内) 分析:先封装一个静态方法用于统计确定的.java文件的有效代码行数.使用字符缓冲流读取文件,首先判断是否是块注释开头,接着判断是否是块注释结尾,再判断是否是单行注释或者空白行,若都不是则是有效代码,统计行数+1. 对于文件夹路径,采用递归的方法判断子条目是文件还是文件夹,是文件就调用静态统计方法.源代码: public class CalculateRow { public static void main(

Linux统计目录下文件个数及代码行数

1. 统计当前目录下,php文件数量 find ./ -name "*.php" | wc -l 2. 统计当前目录下所有php文件代码行数 find ./ -name "*.php" | xargs cat | wc -l 或者 wc -l `find ./ -name "*.php"` | tail -n1 命令说明 wc -l `find ./ -name "*.php"` 输出结果 行数 | 文件 1 ./test.p

Linux统计文件个数或是代码行数

统计指定后缀名的文件总个数命令: find . -name *.cpp | wc -l 统计一个目录下代码总行数以及单个文件行数: find . -name *.h | xargs wc -l linux统计文件夹中文件数目 第一种方法: ls -l|grep “^-”|wc -l ls -l 长列表输出该目录下文件信息(注意这里的文件,不同于一般的文件,可能是目录.链接.设备文件等).如果ls -lR|grep “^-”|wc-l则可以连子目录下的文件一起统计. grep ^- 这里将长列表输

C++ 扫描文件夹下所有文件

void GetFilesFromDirectory(std::vector<std::string> &files, const char *directoryPath) { struct _finddata_t fileinfo; long hFile = 0; char tmpPath[MAX_PATH] = { 0 }; sprintf_s(tmpPath, "%s\\*", directoryPath); if ((hFile = _findfirst(t

[OC Foundation框架 - 20] 统计代码行数

注意: 1.变量名和函数名不要混淆调用 2.不要对文件夹进行文件的操作,没有权限 3.递归调用注意初始化变量 1 // 2 // main.m 3 // CodeLineCount 4 // 5 // Created by hellovoidworld on 14-11-18. 6 // Copyright (c) 2014年 com.hellovoidworld. All rights reserved. 7 // 8 9 #import <Foundation/Foundation.h>

iOS 统计Xcode整个工程的代码行数

小技巧5-iOS 统计Xcode整个工程的代码行数 1.打开终端 2.cd 空格 将工程的文件夹拖到终端上,回车,此时进入到工程的路径 此时已经进入到工程文件夹下 3.运行指令 a. find . -name "*.m" -or -name "*.h" -or -name "*.xib" -or -name "*.c" |xargs wc -l [最后一个字母是L不是数字1] 回车,执行--这条指令是获取每个文件内的代码行数,

python 脚本(获取指定文件夹、指定文件格式、的代码行数、注释行数)

1.代码的运行结果: 获取 指定文件夹下.指定文件格式 文件的: 总代码行数.总注释行数(需指定注释格式).总空行数: 1 #coding: utf-8 2 import os, re 3 4 # 代码所在目录 5 FILE_PATH = './' 6 7 def analyze_code(codefilesource): 8 ''' 9 打开一个py文件,统计其中的代码行数,包括空行和注释 10 返回含该文件总行数,注释行数,空行数的列表 11 ''' 12 total_line = 0 13

统计一个目录下cpp代码行数,子目录下也能统计

1.参考 http://www.cnblogs.com/ZCplayground/p/6275365.html 方法一样.用了下面这一行神秘代码 DIR *.* /B> LIST.TXT 可以发现 DIR *.cpp /B> LIST.TXT 这样可以生成目录下cpp格式的文件记录 经过研究  我发现 把cpp去掉 DIR *. /B> LIST.TXT 这样就可以获取子目录的目录名 文章开头那个博客用了输出.bat文件并运行,在递归下出现各种问题,经过试验和改进,改为了直接运行指令,指