代码行数统计

来源:互联网 发布:java html标签转pdf 编辑:程序博客网 时间:2024/06/06 05:42

本文转自:http://www.oschina.net/code/snippet_566026_17466

package com.xy6;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.util.ArrayList;import java.util.List;import java.util.regex.Matcher;import java.util.regex.Pattern;/** * 代码条数统计 * @author user */public class CodeCount{/** * 正则表达式主要是匹配多行注释 */private static Pattern pattern = Pattern.compile("/\\*([\\s|\\S])+?\\*/");// 基本文件目录private File baseDir;// 拥有的文件列表private List<String> fileList = new ArrayList<String>();// 文件数量private int fileCount = 0;// 代码行数private int lineCount = 0;// 匹配表达式private String matchRegex = "[a-zA-Z0-9_-]*.java";public CodeCount(File baseDir) {this.baseDir = baseDir;}public CodeCount(File baseDir, String matchRegex) {this.baseDir = baseDir;this.matchRegex = matchRegex;}/** * 统计入口 */public void count() {if(!baseDir.isHidden()){if (baseDir.isDirectory()) {for (File child : baseDir.listFiles()) {CodeCount count = new CodeCount(child, matchRegex);count.count();fileCount += count.fileCount;lineCount += count.lineCount;fileList.addAll(count.fileList);}} else {if(baseDir.getName().matches(matchRegex)){try {fileList.add(baseDir.getPath());fileCount ++;String content = getFileContent(baseDir);int line = getCodeCount(content);lineCount += line;} catch (IOException e) {e.printStackTrace();}}}}}/** * 获取文件f中的文本内容 * * @param f * @return * @throws IOException */public String getFileContent(File f) throws IOException {StringBuffer sb = new StringBuffer();FileInputStream input = new FileInputStream(f);byte[] b = new byte[1024];int count = 0;while ((count = input.read(b)) != -1) {sb.append(new String(b, 0, count));}input.close();return sb.toString();}/** * 统计文本中的代码行数 * 1.用正则表达式出去块注释即多行注释 2.再将字符串按照回车符分割成字符串数组 3.除去空白行或者单行注释行 * * @param content *            输入文本 * @return 文本中代码行数 */public int getCodeCount(String content) {int rowCount = 0;Matcher matcher = pattern.matcher(content);content = matcher.replaceAll(" ");String ss[] = content.split("\n");for (String s : ss) {if (s.trim().length() > 0 && !s.trim().startsWith("//"))rowCount++;}return rowCount;}/** * 打印输出结果 */public void print(){// 统计结果输出System.out.println(baseDir + "中所有文件:");for (String file : fileList) {System.out.println(file);}System.out.println();System.out.println("文件总数:" + fileCount);System.out.println("总代码行数" + lineCount);}public File getBaseDir() {return baseDir;}public void setBaseDir(File baseDir) {this.baseDir = baseDir;}public List<String> getFileList() {return fileList;}public void setFileList(List<String> fileList) {this.fileList = fileList;}public int getFileCount() {return fileCount;}public void setFileCount(int fileCount) {this.fileCount = fileCount;}public int getLineCount() {return lineCount;}public void setLineCount(int lineCount) {this.lineCount = lineCount;}public String getMatchRegex() {return matchRegex;}public void setMatchRegex(String matchRegex) {this.matchRegex = matchRegex;}public static void main(String[] args) throws Exception {String path = "D://FS//FB";CodeCount code = new CodeCount(new File(path));code.count();code.print();}}


0 0
原创粉丝点击