zoukankan      html  css  js  c++  java
  • 代码行数统计

    /**
     * Copyright © 2015 All rights reserved.
     */
    package cn.yufu.system.tools;
    
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.io.IOException;
    import java.util.ArrayList;
    
    /**
     * 代码行数统计
     * @author 
     * @version 
     */
    public class CodeCounter {
    
    	/**
    	 * 代码行数统计
    	 */
    	public static void main(String[] args) {
    		String file = CodeCounter.class.getResource("/").getFile();
    		String path = file.replace("target/test-classes", "src");
    
    		ArrayList<File> al = getFile(new File(path));
    		for (File f : al) {
    			if (f.getName().matches(".*\.java$")){ // 匹配java格式的文件
    				count(f);
    				System.out.println(f);
    			}
    		}
    		System.out.println("统计文件:" + files);
    		System.out.println("代码行数:" + codeLines);
    		System.out.println("注释行数:" + commentLines);
    		System.out.println("空白行数:" + blankLines);
    	}
    	
    	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();
    				}
    			}
    		}
    	}
    }
    

      

  • 相关阅读:
    [好文翻译]保卫你的日历
    如何使用PowerShell修改Host文件
    如何使用PowerShell修改注册表
    MSDN文章纠错Automating Microsoft SharePoint 2010 with Windows PowerShell 2.0 (book excerpt)
    如何在PowerShell中得到一个对象的所有属性名和方法名呢?
    Service Object Model
    记录一个问题的解决方法
    STSADM Sync 命令里的 – Ignoreisactive 标志位
    Javascript实现图片位置控制(鼠标拖拽 + 键盘方向键移动)源码分享
    从零开始学习jQuery (六) AJAX快餐【转】
  • 原文地址:https://www.cnblogs.com/guoziyi/p/10037226.html
Copyright © 2011-2022 走看看