??? 最近突然想看看自己所开发的项目的规模是多大,在网上找了半天硬是没找到一个很好的代码行统计工具。于是自己实现了一个简易版的代码行统计工具,先分享如下:
import java.io.File; import java.io.FileReader; import java.io.IOException; import java.io.LineNumberReader; import org.apache.commons.lang.StringUtils; public class ProjectCountLine { private static final String JAVA_FILE_SUF = "java"; private static final String CSS_FILE_SUF = "css"; private static final String JS_FILE_SUF = "js"; private static final String JSP_FILE_SUF = "jsp"; private static final String HTML_FILE_SUF = "html"; private static final String PROPERTIES_FILE_SUF = "properties"; private static final String VM_FILE_SUF = "vm"; // 项目的跟目录 private File rootFile = null; // 项目的行数 private long count = 0L; /** * 入口方法 * * @param path 项目的根目录路径 * @return * @throws IOException * @see [类、类#方法、类#成员] */ public long service(String path) throws IOException { boolean flag = checkPath(path); if (flag) countFilesLine(rootFile); return count; } /** * 检查文件是否是需要统计的文件类型 * * @param fileName 文件的名称 * @return true:文件为需要统计的文件; false:文件为不需要统计的文件 * @see [类、类#方法、类#成员] */ private boolean isCountFileType(String fileName) { if(StringUtils.isBlank(fileName)) return false; if (fileName.endsWith(JAVA_FILE_SUF) || fileName.endsWith(CSS_FILE_SUF) || fileName.endsWith(JS_FILE_SUF) || fileName.endsWith(JSP_FILE_SUF) || fileName.endsWith(HTML_FILE_SUF) || fileName.endsWith(PROPERTIES_FILE_SUF) || fileName.endsWith(VM_FILE_SUF)) return true; return false; } /** * 检查项目的根路径是否正确 * * @param path 项目路径 * @return true:传入的路径是正确的; false:传入的路径不正确 * @see [类、类#方法、类#成员] */ private boolean checkPath(String path) { if (StringUtils.isBlank(path)) return false; rootFile = new File(path); if (!rootFile.exists() && !rootFile.isDirectory()) return false; return true; } /** * 统计指定文件下的所包含的指定格式的文件的行数 * * @param file 指定文件 * @throws IOException 文件不存在时抛出IO异常 * @see [类、类#方法、类#成员] */ private void countFilesLine(File file) throws IOException { File[] files = file.listFiles(); if (null == files) return; for (int i = 0; i < files.length; i++) { File tempFile = files[i]; String fileName = tempFile.getName(); if (fileName.endsWith("svn")) continue; if (tempFile.isFile()) { if (isCountFileType(fileName)) { LineNumberReader linReader = new LineNumberReader(new FileReader(tempFile)); linReader.skip(Long.MAX_VALUE); count += linReader.getLineNumber() + 1; } } else { // 当前为File目录,则进行递归 countFilesLine(tempFile); } } } /* public static void main(String[] args) { ProjectCountLine countLine = new ProjectCountLine(); try { long count = countLine.service("D:/MWConfigWorkSpace/MWConfig"); System.out.println(count); } catch (IOException e) { e.printStackTrace(); } }*/ }
?