看到你這個(gè)問(wèn)題,感覺(jué)蠻有意思的,所以寫(xiě)了個(gè)遞歸方法,可以計(jì)算出項(xiàng)目有多少行代碼
創(chuàng)新互聯(lián)-專業(yè)網(wǎng)站定制、快速模板網(wǎng)站建設(shè)、高性價(jià)比定州網(wǎng)站開(kāi)發(fā)、企業(yè)建站全套包干低至880元,成熟完善的模板庫(kù),直接使用。一站式定州網(wǎng)站制作公司更省心,省錢,快速模板網(wǎng)站建設(shè)找我們,業(yè)務(wù)覆蓋定州地區(qū)。費(fèi)用合理售后完善,10年實(shí)體公司更值得信賴。
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的值就是你的項(xiàng)目路徑
String?path?=?"E:\\lucene\\src";
itemCount.getItemLineNum(new?File(path));
System.out.println("該項(xiàng)目一共有"+itemCount.getFileCount()+"個(gè)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);
}
}
}
}
源代碼行數(shù)統(tǒng)計(jì)器 1.5
本軟件用于統(tǒng)計(jì)軟件工程源代碼行數(shù),可對(duì)指定的子目錄下或整個(gè)目錄樹(shù)中所有指定類型的源代碼文件進(jìn)行行數(shù)統(tǒng)計(jì)。
本軟件的統(tǒng)計(jì)結(jié)果包含源代碼中的注釋行和空行,因?yàn)樽髡哒J(rèn)為它們同樣也是源代碼的必要組成部分。
本軟件對(duì) Windows 下和 Unix/Linux 下的源代碼文件都可以正確地統(tǒng)計(jì)行數(shù)。
方法一:
如果想要通過(guò)java代碼的方式來(lái)計(jì)算.java文件的行數(shù),可以通過(guò)IO來(lái)讀取,
BufferedReader的方法readLine()來(lái)按行讀取,每讀取一行,行數(shù)+1
方法二:
如果要查看.java文件的代碼行數(shù),
可以使用現(xiàn)成的IDE工具,比如ECLIPSE...
每一行的行號(hào)都有表示出來(lái)
//我寫(xiě)了一個(gè)類 測(cè)試了一下 大致沒(méi)問(wèn)題 你看看吧
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("無(wú)效的類路徑");
return;
}
File file = new File(classPath);
int total = 0; // 所有代碼總行數(shù)
int lineCount = 0;// 有效代碼總行數(shù)
int start = 0;// 多行注釋開(kāi)始位置
int end = 0;// 多行注釋結(jié)束位置
//下面開(kāi)始讀取文件 按行來(lái)讀 讀取時(shí)候做判斷
try {
BufferedReader br = new BufferedReader(new FileReader(file));
String lineContent = br.readLine();
while (lineContent != null) {
if (lineContent == null) {
System.err.println("數(shù)據(jù)讀完了!");
} else {
total++;
// 判斷當(dāng)前讀入的記錄行是否是無(wú)效行
lineContent = lineContent.trim();
lineCount++;
if ("".equals(lineContent)) {// 空行
lineCount--;
}
if (lineContent.startsWith("http://")) {// 單行注釋
lineCount--;
}
if (lineContent.startsWith("/*") end == 0) {// 多行注釋開(kāi)頭
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();// 一定要關(guān)閉資源
} 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 = "http://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");
}
}