java文件扫描_Java文件扫描

packagecom.yhj.common.counter;importjava.io.BufferedReader;importjava.io.File;importjava.io.FileNotFoundException;importjava.io.FileReader;importjava.io.IOException;importjava.text.SimpleDateFormat;importjava.util.ArrayList;importjava.util.Date;importcom.yhj.common.io.FileUtil;/*** com.yhj.common.counter.CodeCounter.java

* be created by 2009-12-10 下午05:21:31+

* 本类的主要功能:

*

* 统计某个文件夹下文件 Java文件 以及

* 统计指定目录下以及其子目录下的所有java文件中代码行数 注释数 空行数等

*

*@author一线天色 天宇星辰

**/publicclassCodeCounter {staticlongcodeLines=0;//代码行数staticlongcommentLines=0;//注释行署staticlongblankLines=0;//空白行数staticlongtotalFileCount=0;//总共文件数目staticlongtotalFolderCount=0;//文件夹文件数目staticlongjavaFileCount=0;//Java文件数目staticbooleanisOne=false;//将每次生成的文件生成到一个文件中的标示staticArrayListfileArray=newArrayList();privatestaticString fileName=null;/*** 可以统计指定目录下以及其子目录下的所有java文件中代码*/publicstaticvoidcodeCounter(String path) {//统计程序运行时间longbeginTime=System.currentTimeMillis();//统计运行消耗的内存longbeginMemory=Runtime.getRuntime().freeMemory();//要统计的文件夹File file=newFile(path);

SimpleDateFormat simpleDateFormat=newSimpleDateFormat("yyyy-MM-dd HH:mm:ss");

String beginDetailTime=simpleDateFormat.format(newDate());

System.out.println("=====================================");

writeToLog("=====================================");

System.out.println("开始扫描文件夹"+path+"...");

writeToLog("开始扫描文件夹"+path+"...");//存储文件的数据ArrayListal=getFile(file);

System.out.println("=====================================");

writeToLog("=====================================");

System.out.println("开始统计文件...");

writeToLog("开始统计文件...");for(File f : al) {if(f.getName().matches(".*\\.java$"))//匹配java格式的文件{

System.out.println("正在统计文件:"+f.getPath());

writeToLog("正在统计文件:"+f.getPath());

javaFileCount++;

count(f);

}

}

System.out.println("完成统计!");

writeToLog("完成统计!");

System.out.println("=====================================");

writeToLog("=====================================");

System.out.println("统计结果如下:");

writeToLog("统计结果如下:");

System.out.println("文件夹总数:"+totalFolderCount+"个");

writeToLog("文件夹总数:"+totalFolderCount+"个");

System.out.println("文件总个数:"+totalFileCount+"个");

writeToLog("文件总个数:"+totalFileCount+"个");

System.out.println("Java文件数:"+javaFileCount+"个");

writeToLog("Java文件数:"+javaFileCount+"个");

System.out.println("代码行数:"+codeLines);

writeToLog("代码行数:"+codeLines);

System.out.println("注释行数:"+commentLines);

writeToLog("注释行数:"+commentLines);

System.out.println("空白行数:"+blankLines);

writeToLog("空白行数:"+blankLines);longendMemory=Runtime.getRuntime().freeMemory();longbillMemory=beginMemory-endMemory;longendTime=System.currentTimeMillis();longsec=(endTime-beginTime)/1000;

System.out.println("程序开始时间:"+beginDetailTime);

writeToLog("程序开始时间:"+beginDetailTime);

String endDetailTime=simpleDateFormat.format(newDate());

System.out.println("程序结束时间:"+endDetailTime);

writeToLog("程序结束时间:"+endDetailTime);

System.out.println("程序运行共耗时间:"+sec/60+"分"+sec%60+"秒");

writeToLog("程序运行共耗时间:"+sec/60+"分"+sec%60+"秒");

System.out.println("程序运行共耗内存:"+billMemory*1.0/1024+"KB");

writeToLog("程序运行共耗内存:"+billMemory*1.0/1024+"KB");

}//获得目录下的文件和子目录下的文件privatestaticArrayListgetFile(File f) {

System.out.println("开始扫描子文件夹"+f.getPath()+"...");

writeToLog("开始扫描子文件夹"+f.getPath()+"...");

File[] ff=f.listFiles();for(File child : ff) {if(child.isDirectory()) {

System.out.println("发现文件夹:"+child.getPath());

writeToLog("发现文件夹:"+child.getPath());

totalFolderCount++;

getFile(child);

}else{

fileArray.add(child);

totalFileCount++;

System.out.println("发现文件:"+child.getPath());

writeToLog("发现文件:"+child.getPath());

}

}

System.out.println("文件夹"+f.getPath()+"扫描结束!");

writeToLog("文件夹"+f.getPath()+"扫描结束!");returnfileArray;

}//统计文件privatestaticvoidcount(File f) {

BufferedReader br=null;booleanflag=false;try{

br=newBufferedReader(newFileReader(f));

String line="";while((line=br.readLine())!=null) {

line=line.trim();//除去注释前的空格if(line.matches("^[ ]*$")) {//匹配空行blankLines++;

}elseif(line.startsWith("//")) {

commentLines++;

}elseif(line.startsWith("/*")&&!line.endsWith("*/")) {

commentLines++;

flag=true;

}elseif(line.startsWith("/*")&&line.endsWith("*/")) {

commentLines++;

}elseif(flag==true) {

commentLines++;if(line.endsWith("*/")) {

flag=false;

}

}else{

codeLines++;

}

}

}catch(FileNotFoundException e) {

e.printStackTrace();

}catch(IOException e) {

e.printStackTrace();

}finally{if(br!=null) {try{

br.close();

br=null;

}catch(IOException e) {

e.printStackTrace();

}

}

}

}privatestaticvoidwriteToLog(String data) {try{if(!isOne)

{

SimpleDateFormat simpleDateFormat=newSimpleDateFormat("yyyy-MM-dd HH.mm.ss");

fileName=simpleDateFormat.format(newDate())+".log";

isOne=true;

}

FileUtil.writeStringToFile("F:/YHJ日志生成区",fileName, data+"\n","UTF-8",true);

}catch(Exception e) {//TODO Auto-generated catch blocke.printStackTrace();

}

}publicstaticvoidmain(String[] args) {

codeCounter("C:/Program Files");

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值