項目代碼行數統計--java類統計

簡易版的代碼行統計工具類

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("E:\\Demo\\java\\eclipse\\afk");
			System.out.println(count);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章