看到你这个问题,感觉蛮有意思的,所以写了个递归方法,可以计算出项目有多少行代码
创新互联-专业网站定制、快速模板网站建设、高性价比定州网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式定州网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖定州地区。费用合理售后完善,10年实体公司更值得信赖。
public class ItemCount
{
private int lineCount;
private int fileCount;
public int getLineCount()
{
return lineCount;
}
public int getFileCount()
{
return fileCount;
}
public static void main(String[] args) throws IOException
{
ItemCount itemCount = new ItemCount();
//path的值就是你的项目路径
String path = "E:\\lucene\\src";
itemCount.getItemLineNum(new File(path));
System.out.println("该项目一共有"+itemCount.getFileCount()+"个java源文件,"+itemCount.getLineCount()+"行代码");
}
//递归
public void getItemLineNum(File path) throws IOException{
if(path.isFile() path.getName().endsWith(".java")){
BufferedReader br = new BufferedReader(new FileReader(path));
fileCount++;
while(br.readLine()!=null){
lineCount++;
}
System.out.println(path.getName());
br.close();
}else if(path.isDirectory()){
File[] listFiles = path.listFiles();
for (File file : listFiles)
{
getItemLineNum(file);
}
}
}
}
源代码行数统计器 1.5
本软件用于统计软件工程源代码行数,可对指定的子目录下或整个目录树中所有指定类型的源代码文件进行行数统计。
本软件的统计结果包含源代码中的注释行和空行,因为作者认为它们同样也是源代码的必要组成部分。
本软件对 Windows 下和 Unix/Linux 下的源代码文件都可以正确地统计行数。
方法一:
如果想要通过java代码的方式来计算.java文件的行数,可以通过IO来读取,
BufferedReader的方法readLine()来按行读取,每读取一行,行数+1
方法二:
如果要查看.java文件的代码行数,
可以使用现成的IDE工具,比如ECLIPSE...
每一行的行号都有表示出来
//我写了一个类 测试了一下 大致没问题 你看看吧
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.RandomAccessFile;
public class GetLoc {
public static void execute(String classPath) {
if (classPath == null || "".equals(classPath)) {
System.err.println("无效的类路径");
return;
}
File file = new File(classPath);
int total = 0; // 所有代码总行数
int lineCount = 0;// 有效代码总行数
int start = 0;// 多行注释开始位置
int end = 0;// 多行注释结束位置
//下面开始读取文件 按行来读 读取时候做判断
try {
BufferedReader br = new BufferedReader(new FileReader(file));
String lineContent = br.readLine();
while (lineContent != null) {
if (lineContent == null) {
System.err.println("数据读完了!");
} else {
total++;
// 判断当前读入的记录行是否是无效行
lineContent = lineContent.trim();
lineCount++;
if ("".equals(lineContent)) {// 空行
lineCount--;
}
if (lineContent.startsWith("//")) {// 单行注释
lineCount--;
}
if (lineContent.startsWith("/*") end == 0) {// 多行注释开头
start = lineCount;
}
if ((lineContent.startsWith("*/") || lineContent
.endsWith("*/"))
start != 0) {
end = lineCount;
lineCount = lineCount - (end - start + 1);
end = 0;
start = 0;
}
}
lineContent = br.readLine();
}
br.close();// 一定要关闭资源
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
// 从路径中分离出类名
String temp = new StringBuffer(classPath).reverse().toString();
int sp1 = temp.indexOf("/");
int sp2 = temp.indexOf("\\");
int pos = sp1 sp2 ? sp1 : sp2;//取离分隔符近的
String className = "";
if (pos != 0) {
className = temp.substring(0, pos);
className = new StringBuffer(className).reverse().toString();
}
// 拼成注释
String result = "";
if (!"".equals(className)) {
result = "//LOC(\"OneMatcher.java\") = " + lineCount;
}
// 加在类的尾巴上面
try {
RandomAccessFile randomFile = new RandomAccessFile(classPath, "rw");
long fileLength = randomFile.length();
randomFile.seek(fileLength);
randomFile.writeBytes(result);
randomFile.close();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("类文件"+className+"总共"+total+"代码,其中有效代码"+lineCount+"行");
}
public static void main(String[] args) {
execute("C:\\Users\\konglingzhen\\Desktop\\RandomAccessFile.java");
}
}