欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

指定文件夹代码行数统计以及代码输出到文本

程序员文章站 2022-03-26 17:43:59
前言最近为了创新学分在进行软著申请,申请表上得标注代码行数,而且还需要源代码。但是我感觉数代码行数粘贴代码超级无聊,于是就想有没有简单的方法。然后就写了个简单的工具类来统计代码,同时也可以将源代码输出到txt文件里。但是对于注释或者空行没有处理。代码比较简单,如果想处理代码和空行也可以自己加点逻辑。代码import java.io.*;/** * @ClassName: CodeCount * @date: 2020/11/27 14:50 * @author 索半斤 * @Descrip...

前言

最近为了创新学分在申请软著,软著申请表上要求标注代码行数,而且还需要贴源代码。但是作为懒宅晚期患者,我感觉数代码行数和粘贴代码超级无聊。我就想到之前老师说一个学长用python写过类似的工具来统计代码行数,然后我就想Java能不能实现。经过简单的封装就用Java写了这个简单的工具类来统计代码。当然你也可以使用这个工具类将源代码输出到txt文件里。代码比较简单,没有处理注释和空行,如果想处理注释和空行也可以自己加点逻辑(空行主要使用StringUtils中的isEmpty()方法判断,注释根据注释习惯可以使用正则表达式处理)。

代码

import java.io.*;

/**
 * @ClassName: CodeCount
 * @date: 2020/11/27 14:50
 * @author 索半斤
 * @Description: 小工具,用来申请软著时自动统计代码行数并能够将代码输出到txt文本
 */
public class CodeCount {
    private static int i,j = 0;
    /**
     * @MethodName: countCodeLine
     * @date: 2020/11/27 14:36
     * @author 索半斤
     * @Description: 用于统计代码行数
     * @param path 要扫描的包的绝对路径
     * @param suffix 要统计的文件后缀,例如java
     */
    public static Integer countCodeLine(String path,String suffix){
        return getFileOrCodeCount(path, suffix, "i");
    }

    /**
     * @MethodName: countFiles
     * @date: 2020/11/27 14:37
     * @author 索半斤
     * @Description: 用于统计文件数
     * @param path 要扫描的包的绝对路径
     * @param suffix 要统计的文件的后缀
     */
    public static Integer countFiles(String path,String suffix){
       return getFileOrCodeCount(path, suffix,  "j");
    }

    /**
     * @MethodName: outFile
     * @date: 2020/11/27 14:43
     * @author 索半斤
     * @Description: 将代码输出到txt文件中(自动换行,默认目录)
     * @param path 要扫描的包的绝对路径
     * @param suffix 要统计的文件的后缀
     * @param name 输出的文件名称
     */
    public static void outFile(String path,String suffix,String name){
        File file = new File(path);
        BufferedWriter bufferedWriter;
        try {
            bufferedWriter = new BufferedWriter(new FileWriter(name+".txt"));
            traverseFiles(file,bufferedWriter,suffix);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * @MethodName: outFileToPath
     * @date: 2020/11/27 14:45
     * @author 索半斤
     * @Description: 将代码写入到文本文件并输出到指定的目录
     * @param path 要扫描的包的绝对路径
     * @param suffix 要统计的文件的后缀
     * @param Filepath 要输出的文件夹绝对路径
     */
    public static void outFileToPath(String path,String suffix,String Filepath){
        boolean b = Filepath.endsWith(".txt");
        if (!b)return;
        File file = new File(path);
        BufferedWriter bufferedWriter;
        try {
            bufferedWriter = new BufferedWriter(new FileWriter(Filepath));
            traverseFiles(file,bufferedWriter,suffix);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * @MethodName: getFileOrCodeCount
     * @date: 2020/11/27 14:46
     * @author 索半斤
     * @Description: 获取代码行数或者文件数量
     */
    private static Integer getFileOrCodeCount(String path,String suffix,String type){
        File file = new File(path);
        try {
            traverseFiles(file,suffix);
            if (type.equals("i"))return i;
            else if (type.equals("j"))return j;
            else return null;
        } catch (IOException e) {
            e.printStackTrace();
            return null;
        }
    }



    private static void traverseFiles(File file, BufferedWriter bufferedWriter,String suffix) throws IOException {
        if(!file.exists()){
            return;
        }

        if(!file.isDirectory()){
            String filename = file.getName();
            if(filename.endsWith("."+suffix)){
                BufferedReader bufferedReader = new BufferedReader(new FileReader(file));
                String string =null;
                while ((string = bufferedReader.readLine()) != null) {
                    //if (StringUtils.isEmpty(string))continue; 处理空行
                    bufferedWriter.write(string);
                    bufferedWriter.newLine();
                    bufferedWriter.flush();
                }
            }else
                return;
        }

        File[] files =file.listFiles();
        if (files == null || files.length == 0) {
            return;
        }

        for(File file2 : files){
            traverseFiles(file2,bufferedWriter,suffix);
        }
    }

    private static void traverseFiles(File file,String suffix) throws IOException {
        if(!file.exists()){
            return;
        }
        if(!file.isDirectory()){
            String filename = file.getName();
            if(filename.endsWith("."+suffix)){
                j++;
                BufferedReader bufferedReader = new BufferedReader(new FileReader(file));
                String string =null;
                while ((string = bufferedReader.readLine()) != null) {
                    i++;//读取行数
                }
            }else
                return;
        }

        File[] files =file.listFiles();
        if (files == null || files.length == 0) {
            return;
        }

        for(File file2 : files){
            traverseFiles(file2,suffix);
        }
    }

}

本文地址:https://blog.csdn.net/qq_43437555/article/details/110246814

相关标签: 小工具 java