目的:
一门语言的,如Java的入门,至少要编写两万行代码,所以我们需要编写计算代码行数的程序:这个程序同时可以知道我们编写的每一个程序的程度(大概可以从代码的长度可以看出一部分);这也是一种必要性。
源代码:
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class StaticsCodeingLine {
private static int whiteLines = 0;
private static int commentLines = 0;
private static int normalLines = 0;
/**
* @param args
*/
public static void main(String[] args) {
File f = new File("G:\\java\\javav\\TextMulTable\\src\\TextMulTable.java");
sumCode(f);
}
private static void sumCode(File file) {
BufferedReader br = null;
boolean comment = false;
try {
br = new BufferedReader(new FileReader(file));
String line = "";
try {
while ((line = br.readLine()) != null) {
line = line.trim();
if (line.matches("^[\\s&&[^\\n]]*$")) {
whiteLines++;
} else if (line.startsWith("/*") && !line.endsWith("*/")) {
commentLines++;
comment = true;
} else if (true == comment) {
commentLines++;
if (line.endsWith("*/")) {
comment = false;
}
} else if (line.startsWith("//")) {
commentLines++;
} else {
normalLines++;
}
}
} catch (IOException e) {
e.printStackTrace();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
if (br != null) {
try {
System.out.println("空行数:"+whiteLines);
System.out.println("注释行数:"+commentLines);
System.out.println("代码行数:"+normalLines);
br.close();
br = null;
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
代码执行结果:
这源代码基本都是参考老师分享的链接得来的,但是同时遇到一个小问题,如下:
The declared package..does not match the expected package
大概是:包名必须在程序中通过package语句来指定(例如 package org.it),而不是单纯的靠目录结构来指定,是先有了包名之后,才需要相应的目录结构。这是实际上的类名为org.it315.classname。必须把包声明放在源文件最前面,并且每个源文件最多只能声明一个包。好像移除就可以了吧;