`

统计一个项目的有效代码

阅读更多

package com.imti.work.cla;

import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;

import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

/**统计一个项目中代码的行数,空行,注释数。*/
public class ProjectCountTools extends JFrame implements ActionListener
{
private static final long serialVersionUID = -8565575686696452521L;
//真正的有效代码行要过滤以下
public final String[] filters =
{
"/",
"*",
"package",
"import"
};
//文件夹位置。
private String path = "";
//文件夹下所有的以.java结尾的文件。
private ArrayList<String> fileNames = null;
//打开项目所在文件夹
private Button openProject = new Button("选择项目");
//显示结果。
private JTextArea textarea = new JTextArea(15,50);

private JScrollPane jsp = null;

//有效代码行数。
private int youxiao = 0;
//空行
private int kong = 0;
//注释行
private int zhushi = 0;
//import行
private int importhang = 0;
//package行
private int packagehang = 0;

/**构造方法摘要*/
public ProjectCountTools()
{
this.setLayout(new BorderLayout());
this.setTitle("项目代码行统计工具");
this.setBounds(new Rectangle(500,400));
this.setResizable(false);
this.setVisible(true);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.add(openProject,BorderLayout.NORTH);
jsp = new JScrollPane(textarea);
this.add(jsp,BorderLayout.CENTER);
openProject.addActionListener(this);
textarea.setWrapStyleWord(true);
this.pack();
}
/**
* @param args
*/
public static void main(String[] args)
{
new ProjectCountTools();

}

/**事件处理方法*/
public void actionPerformed(ActionEvent event)
{
if(event.getSource().equals(openProject))
{
//FileDialog dialog = new FileDialog(this);
//dialog.setVisible(true);
JFileChooser filechooser = new JFileChooser();
filechooser.setDialogType(JFileChooser.DIRECTORIES_ONLY);
filechooser.setDialogTitle("选择一个项目");
filechooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
int res = filechooser.showOpenDialog(this);
if(res == JFileChooser.APPROVE_OPTION)
{
path = filechooser.getSelectedFile().getAbsolutePath();
if(!"".equals(path) && null != path)
{
textarea.setText("");
youxiao = 0;
kong = 0;
zhushi = 0;

fileNames = new ArrayList<String>();

textarea.append("项目位置:"+path+"/n包含以下java文件:/n");
getFiles(path);
for(int i = 0;i < fileNames.size();i++)
{
textarea.append(fileNames.get(i)+"/n");
}
textarea.append("总共包含"+fileNames.size()+"个java文件/n");
textarea.append("------------------------分析结果-------------------/n");
getCountFromFiles(fileNames);
textarea.append("有效代码行:"+youxiao+"/n");
textarea.append("空行:"+kong+"/n");
textarea.append("注释行:"+zhushi+"/n");
textarea.append("import行:"+importhang+"/n");
textarea.append("package行:"+packagehang+"/n");
}
}
}
}

//取得文件夹下所有的以.java结尾的文件。
public void getFiles(String path)
{
File file = new File(path);
//如果是文件夹。
if(file.isDirectory())
{
File[] files = file.listFiles();
for(File f :files)
{
//如果是文件,保存文件名。
if(f.isFile() && f.getName().endsWith(".java"))
{
fileNames.add(f.getPath());
}
else
{
getFiles(f.getAbsolutePath());
}
}
}
}

/**分析文件中所包含的有效代码行,空行,注释的数目。*/
public void getCountFromFiles(ArrayList<String> fileNames)
{
for (int i = 0; i < fileNames.size(); i++)
{
//完整文件名。
String fileName = fileNames.get(i);
BufferedReader br = null;
try
{
br = new BufferedReader(new FileReader(fileName));
String temp = null;
while((temp = br.readLine()) != null)
{
temp = temp.trim();
if(temp.startsWith("*")||temp.startsWith("/"))
{
zhushi++;
}
else if(isKong(temp))
{
kong++;
}
else if((temp.startsWith("import")))
{
importhang++;
}
else if((temp.startsWith("package")))
{
packagehang++;
}
else
{
youxiao++;
}
}
} catch (FileNotFoundException e)
{
e.printStackTrace();
} catch (IOException e)
{
e.printStackTrace();
}
finally
{
try
{
br.close();
} catch (IOException e)
{
e.printStackTrace();
}
}
}
}

/**判断某一个字符串是否为空行。*/
public boolean isKong(String str)
{
for (int i = 0; i < str.length(); i++)
{
if(!(str.charAt(i) == ' '))
{
return false;
}
}
return true;
}

}

分享到:
评论

相关推荐

    项目代码统计,代码行数统计

    统计项目代码行数,包括空白行、注释行、有效代码行、文件总数

    代码行数统计工具 source counter + diffcount

    SourceCounter是一个适用性广泛的代码统计工具,通过这个工具能够对30多种代码进行代码行数、...使用工具diffcount可以统计一个项目之间两个版本的代码变动量。新版本较老版本有多少新增、修改、删除、有效代码量等。

    统计你的项目中所有java文件中有效代码量,注解量及空行数

    使用java 正规表达式来完成类似功能代码及测试程序

    JAVA上百实例源码以及开源项目源代码

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...

    .net代码统计

    基于vs 2010的.net代码统计方式, 不包括注释内容,统计有效代码行数, 适合跟踪系统的代码增长进度 需要.NET4.0框架 Email:1355935226@qq.com QQ:1355935226

    用python统计项目的有效代码总行数

    计算代码总行数,不计入代码的空行,以及注释内容所在行。可以检测微信小程序、python文件代码总量,用于满足填写软著相关信息等需求。

    基于Java+Swing实现的代码统计工具(课程设计)

    系统实现了统计C,C++,Java代码的空行、注释、有效代码行数 使用说明 直接运行main方法即可 运行环境:idea/eclipse jdk8以上 详情:https://blog.csdn.net/qq_33037637/article/details/125465449

    基于MATLAB的教室人数统计系统源码项目说明(统计某课程受欢迎度).zip

    基于MATLAB的教室人数统计系统源码+项目说明(统计某课程受欢迎度,为学生进行师生双选做依据+得知教室人数,可以有效合理安排资源,共师生安排教室自习+得知人数,可以远程进行灯光,冷暖气的精准输送).zip

    修改别人的一个简单的源代码行数统计器,可导出到excel

    一个简单的源代码行数统计器: 选择项目所在的文夹——选择文件类型——排除掉一些不希望统计的文件(比如VS自动生成的代码)——计算行数。。。 有效代码行数=总的行数 - 空格行 - 注释行 支持多级目录 修改...

    使用PHP统计PHP的代码行数

    使用PHP统计PHP的代码行数 一、 开发环境 1、环境搭建:Windows 7+Apache ... 2、文本编辑器:Sublime 3。 二、主要技术 本案例主要使用PHP中的文件操作函数以及正则表达式来实现统计PHP项目中有效代码行数的功能。

    代码行数统计

    3,文件过滤 单击“扩展名”按钮,在弹出的对话框中可以设置文件类型,“激活”启用该扩展名,新建一个扩展名为\"*\"的项目,表示任意扩展名。 4,保存 可以将统计信息保存为 HTML 或者 TEXT 格式。...

    代码统计工具

    统计项目代码行数,包括有效代码行数,注释行数,空行数,总行数!

    统计的美容网站源码完整

    浙江医疗美容网网站统计 1、统计项目:今日 昨日...4、内容统计:入口统计、页面浏览统计(需要每个页面加统计代码才有效) 5、统计样式模板选择 6、admin.asp 统计程序设置 show.asp 统计数据浏览 默认管理密码:admin

    基于MATLAB的教室人数统计系统源码+项目说明(统计某课程受欢迎度+得知教室人数,远程灯光+冷暖气精准输送).zip

    基于MATLAB的教室人数统计系统源码+项目说明(统计某课程受欢迎度,为学生进行师生双选做依据+得知教室人数,可以有效合理安排资源,共师生安排教室自习+得知人数,可以远程进行灯光,冷暖气的精准输送).zip

    IOS直播带货直播商城系统开源项目源代码

    这使得该系统具有通用性,无论是个人还是企业都可以使用该系统快速搭建一个属于自己的直播商城系统。该系统基于ThinkPHP 6.0和iOS原生开发,拥有专业的售后技术团队,为用户提供无忧的二次开发支持。系统功能丰富,...

    C#做的注释删除统计工具

    VS2008做的一个注释删除统计工具 1.支持C#,JAVA,C/C++各种注释删除。可选整个项目文件夹 2.支持删除关键字。...3.统计项目有效代码总行数并生成WORD导出。 发布测试版,继续完善功能。 已打包,需要安装。

    vue单页应用加百度统计代码(亲测有效)

    这样做就涉及到一个问题,Vue.js项目是单页应用,每次用户浏览网站时,访问内页时页面是不会刷新的,也就意味着不会触发百度统计代码;所以最终在百度统计后台看到的效果就是只统计到了网页入口的流量,却无法统计到...

    计算机专业毕设ASP.NET某店POS积分管理系统——积分实绩更新及销售状况统计(源代码+论文).rar

    本项目为计算机专业学生的毕业设计作品,采用ASP.NET技术构建,旨在实现一个功能完善的某店POS积分管理系统。系统包括积分实绩更新和销售状况统计两大核心功能,可帮助商家更有效地管理会员积分和销售数据,提升客户...

    计算机毕业设计-微信小程序校篮球联赛+论文+项目源代码.rar

    本项目是一个基于微信小程序的校篮球联赛管理系统,旨在提供一个便捷、高效、互动性强的平台,以满足学校篮球联赛的组织、管理、宣传及观众参与等需求。系统涵盖了赛事管理、球队管理、球员管理、赛程安排、成绩发布...

Global site tag (gtag.js) - Google Analytics