命令行输入文件名,源代码计数器
目标2:从命令行输入一个参数(指定目录或文件),输出该目录下指定类型文件(.cs, .java)的个数、每个文件的总行数、空行数、注释行数、代码行数。
目标3:从命令行输入两个参数(指定目录或文件),(文件类型),输出该目录下指定类型文件(.cs, .java)的个数、每个文件的总行数、空行数、注释行数、代码行数。
下面代码可适用目标2、3……
import java.io.*;
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) throws IOException
{
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
System.out.println("please input filename");
String filename=in.readLine();
try{
File f =new File(filename);
sumCode(f);
}catch(ArrayIndexOutOfBoundsException e)
{
System.out.println("Usage:ShowFile File");
return;
}
}
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();
}
}
}
}
}
目标2运行结果
目标3运行结果
