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;
}
}
相关推荐
总的来说,统计源代码行数及有效代码是一项重要的软件工程任务,可以帮助开发者了解项目规模,估计开发时间和维护成本。通过使用各种工具和自定义脚本,我们可以有效地过滤注释行,定制符合项目需求的统计方式。无论...
在编程领域,代码行数(Lines of Code, LOC)经常被用作衡量项目规模和开发工作量的一个指标。对于C#开发者来说,了解如何统计有效代码行数是十分重要的。本篇文章将深入探讨C#代码行数统计的概念、方法以及其在实际...
首先,代码行数(Lines of Code, LOC)是衡量项目工作量的一个基本指标。它通常分为三类:空白行、注释行和有效代码行。空白行指的是不含任何可执行代码或注释的行,它们可能是空格、制表符或换行符。注释行是程序员...
C#项目也不例外,一个有效的代码量统计工具可以帮助我们量化开发工作,评估项目健康状况,以及进行性能优化。本篇文章将详细探讨如何开发一个C#项目的代码量统计工具,以及相关的技术要点。 首先,我们需要理解代码...
在IT行业中,软件开发是一项复杂且精细的工作,涉及到大量的代码编写。为了有效地管理和评估项目进度,开发者和项目...总的来说,一个好的代码统计工具是软件开发过程中的得力助手,能有效提升开发效率和项目管理水平。
例如,注释行通常不计入有效代码行,因为它们不直接影响程序执行。此外,用户还可以排除特定的库引用或者框架代码,这些通常不被视为项目的核心代码。 导出Excel功能是另一个实用特性。Excel是一种广泛使用的电子...
虽然代码行数并不能直接反映代码的质量,但它可以作为一个参考指标,用于比较不同项目的大小或者追踪项目随时间的增长情况。在代码审查和项目管理中,了解代码行数有助于评估维护成本和潜在的复杂性。 .NET代码行数...
源代码统计工具SourceCount是一款非常实用的软件,它专为开发者设计,用于高效地分析和统计项目中的代码结构。在软件开发过程中,了解代码的组成是至关重要的,它可以帮助我们评估项目的规模,优化代码质量,以及...
2. **分类统计**:不仅计算有效代码行,还会区分注释行和空行,提供更为详细的统计信息。 3. **代码质量分析**:通过分析代码行数,可以评估代码质量,比如代码复杂度、冗余和可读性。 4. **项目进度评估**:在项目...
"Visual Studio 统计代码行数"这个主题就是一个非常实用的功能,它能帮助我们量化项目的代码量,进而评估项目进度、复杂性和维护性。以下是对这个功能的详细解释: Visual Studio是一款由微软公司开发的强大集成...
"代码量统计工具"就是这样一个实用的工具,它能够帮助我们对各种编程语言的代码进行统计分析,提供关于代码行数、空行和有效代码行的详细信息。下面我们将深入探讨这个工具的功能、应用及其重要性。 首先,代码统计...
标题“VC中项目代码统计插件源代码”表明我们将关注一个专用于统计VC项目源代码信息的插件,而描述则提到这是一个Addins程序,有助于分析代码结构并提供了方便的用户体验。 Addins是Visual Studio IDE的扩展,它们...
代码统计是软件工程中的一个重要环节,它有助于评估项目的规模、复杂性以及维护成本。QT代码统计器能够统计以下关键指标: 1. 总行数:包含空行、注释行和实际代码行。 2. 注释行数:统计源代码中的单行注释和多行...
总而言之,统计代码的有效行数是软件开发管理中的一个实用技术,它有助于理解项目的规模,跟踪进度,以及评估团队和个人的生产力。利用像SourceCounter这样的工具,可以方便、准确地完成这一任务,同时也要意识到...
例如,如果你有一个名为"my_project"的目录,你可以运行"linecount my_project"来获取该目录下所有代码的统计信息。工具通常会返回总代码行、空行、注释行等关键数据。 值得注意的是,虽然代码行数是一个直观的度量...
本话题主要关注如何统计Java项目中的有效代码量、注解量和空行数。我们将通过编写一个Java程序来实现这一功能,并以`CodeCount.java`作为我们的核心工具文件,而`a.java`和`b.java`则是我们用于测试的Java源代码文件...
本篇文章将深入探讨如何使用VC++来创建一个统计有效代码行数的计算器,同时涵盖C++和C语言的代码统计。 首先,我们要明确什么是有效代码行数、注释行数和空白行数。有效代码行通常指的是包含实际指令或声明的行,...
此外,对于开源项目,代码统计信息也是贡献者和潜在用户了解项目规模和活跃程度的一个途径。 在实际操作中,这个名为"CodeAnalysis"的压缩包文件很可能包含该代码统计工具的源代码、编译好的可执行文件、使用说明或...
"eclipse代码行数统计插件"就是这样一个工具,它能够帮助开发者快速地统计出项目中的代码行数,包括注释和空行。 在Eclipse中,安装和使用代码行数统计插件非常简单。首先,用户需要打开"Windows"菜单,然后选择...
"统计代码行数的Eclipse插件"就是这样一个工具,它能够帮助开发者快速地分析和度量他们的代码库,包括注释和实际可执行代码的数量。 这个插件设计精良,经过全面测试,确保了统计结果的准确性。无论是整个工程目录...