java程式碼統計.java.xml.jsp等程式碼行數
阿新 • • 發佈:2019-01-02
package com.cn.love.util.counter; import java.io.*; import java.util.ArrayList; /** * Created by @Auther fyb as qq[1225408356] * * @Date 2017/6/30 9:41 */ public class CodeCounter { /** * 程式碼行數統計 */ public static void main(String[] args) { String file = CodeCounter.class.getResource("/").getFile(); String path = file.replace("D:/love/love/love-core/target/test-classes", "src"); ArrayList<File> al = getFile(new File(path)); for (File f : al) { if (f.getName().matches(".*\\.java$")|| f.getName().matches(".*\\.xml$")||f.getName().matches(".*\\.jsp$")){ // 匹配java格式的檔案 count(f); // System.out.println(f);// 列印檔案路徑 } } System.out.println("統計檔案:" + files); System.out.println("程式碼行數:" + codeLines); System.out.println("註釋行數:" + commentLines); System.out.println("空白行數:" + blankLines); System.out.println("總行數:" + (codeLines+commentLines)); } static long files = 0; static long codeLines = 0; static long commentLines = 0; static long blankLines = 0; static ArrayList<File> fileArray = new ArrayList<File>(); /** * 獲得目錄下的檔案和子目錄下的檔案 * @param f * @return */ public static ArrayList<File> getFile(File f) { File[] ff = f.listFiles(); for (File child : ff) { if (child.isDirectory()) { getFile(child); } else fileArray.add(child); } return fileArray; } /** * 統計方法 * @param f */ private static void count(File f) { BufferedReader br = null; boolean flag = false; try { br = new BufferedReader(new FileReader(f)); String line = ""; while ((line = br.readLine()) != null) { line = line.trim(); // 除去註釋前的空格 if (line.matches("^[ ]*$")) { // 匹配空行 blankLines++; } else if (line.startsWith("//")) { commentLines++; } else if (line.startsWith("/*") && !line.endsWith("*/")) { commentLines++; flag = true; } else if (line.startsWith("/*") && line.endsWith("*/")) { commentLines++; } else if (flag == true) { commentLines++; if (line.endsWith("*/")) { flag = false; } } else { codeLines++; } } files++; } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } finally { if (br != null) { try { br.close(); br = null; } catch (IOException e) { e.printStackTrace(); } } } } }