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

    http://www.oschina.net/code/snippet_566026_17466

    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(" ");
            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 = "S:\快盘\workspace\commons-godway";
            CodeCount code = new CodeCount(new File(path));
            code.count();
            code.print();
        }
    }
  • 相关阅读:
    SHA1 VS RSA: what's the difference between them?
    TLS Security
    TLS Handshake Protocol
    Building Cython code
    Getting started with JupyterLab
    Installing Cython
    【转贴】libcrypto.so.10丢失导致sshd无法运行解决方案
    [Typescript] Function Overloads
    [Typescript] Function Generics
    [Typescript] Discriminated (Tagged) Unions
  • 原文地址:https://www.cnblogs.com/lianghui66/p/4208554.html
Copyright © 2011-2022 走看看