import java.io.*
/**
* java代码行数统计工具类
* Created by 孙义朗 on 2017/11/17 0017.
*/
public class CountCodeLineUtil {
private static int normalLines = 0 //有效程序行数
private static int whiteLines = 0 //空白行数
private static int commentLines = 0//注释行数
public static void countCodeLine(File file) {
System.out.println("代码行数统计:" + file.getAbsolutePath())
if (file.exists()) {
try {
scanFile(file)
} catch (IOException e) {
e.printStackTrace()
}
} else {
System.out.println("文件不存在!")
System.exit(0)
}
System.out.println(file.getAbsolutePath() + " ,java文件统计:" +
"总有效代码行数: " + normalLines +
" ,总空白行数:" + whiteLines +
" ,总注释行数:" + commentLines +
" ,总行数:" + (normalLines + whiteLines + commentLines))
}
private static void scanFile(File file) throws IOException {
if (file.isDirectory()) {
File[] files = file.listFiles()
for (int i = 0i <files.lengthi++) {
scanFile(files[i])
}
}
if (file.isFile()) {
if (file.getName().endsWith(".java")) {
count(file)
}
}
}
private static void count(File file) {
BufferedReader br = null
// 判断此行是否为注释行
boolean comment = false
int temp_whiteLines = 0
int temp_commentLines = 0
int temp_normalLines = 0
try {
br = new BufferedReader(new FileReader(file))
String line = ""
while ((line = br.readLine()) != null) {
line = line.trim()
if (line.matches("^[//s&&[^//n]]*$")) {
// 空行
whiteLines++
temp_whiteLines++
} else if (line.startsWith("/*") &&!line.endsWith("*/")) {
// 判断此行为"/*"开头的注释行
commentLines++
comment = true
} else if (comment == true &&!line.endsWith("*/")) {
// 为多行注释中的一行(不是开头和结尾)
commentLines++
temp_commentLines++
} else if (comment == true &&line.endsWith("*/")) {
// 为多行注释的结束行
commentLines++
temp_commentLines++
comment = false
} else if (line.startsWith("//")) {
// 单行注释行
commentLines++
temp_commentLines++
} else {
// 正常代码行
normalLines++
temp_normalLines++
}
}
System.out.println(file.getName() +
" ,有效行数" + temp_normalLines +
" ,空白行数" + temp_whiteLines +
" ,注释行数" + temp_commentLines +
" ,总行数" + (temp_normalLines + temp_whiteLines + temp_commentLines))
} catch (FileNotFoundException e) {
e.printStackTrace()
} catch (IOException e) {
e.printStackTrace()
} finally {
if (br != null) {
try {
br.close()
br = null
} catch (IOException e) {
e.printStackTrace()
}
}
}
}
//测试
public static void main(String[] args) {
File file = new File("F:\\myweb")
countCodeLine(file)
}
}
获取行数涉及到java中读写文件的IO操作。获取一个文本文件的行数较为方便的方法,是通过BufferedReader类的readLine()方法,间接的统计行数。
源代码:
public static int getTextLines() throws IOException {
String path = "c:\\job.txt" // 定义文件路径
FileReader fr = new FileReader(path) //这里定义一个字符流的输入流的节点流,用于读取文件(一个字符一个字符的读取)
BufferedReader br = new BufferedReader(fr) // 在定义好的流基础上套接一个处理流,用于更加效率的读取文件(一行一行的读取)
int x = 0 // 用于统计行数,从0开始
while(br.readLine() != null) { // readLine()方法是按行读的,返回值是这行的内容
x++ // 每读一行,则变量x累加1
}
return x //返回总的行数
}
相信看完上面的,应该就会了。