java源文件分析统计

该Java程序实现了一个简单的命令行应用,用户可以输入目录进行源代码分析,包括统计Java文件数量、行数、空白行和字节数。分析结果会被保存到文本文件中,用户可以通过菜单选择查看不同结果文件。
摘要由CSDN通过智能技术生成

刚学java时写的,记得查了不少博客才搞定。

虽然不是啥好东西,不过还是记录一下。

1.菜单

package main;

import java.io.File;
import java.io.IOException;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) throws IOException {
        Scanner sc=new Scanner(System.in);
        File file=new File("result");
        if(!file.exists())
        file.mkdir();
        while(true) {
            Menu();
            if (sc.hasNextInt()) {
                int flag = sc.nextInt();
                switch (flag) {
                    case 1:
                        Deal.analysis();
                        break;
                    case 2:
                        LookUp.lookup();
                        break;
                    case 0:
                        System.out.println("退出程序!");
                        return;
                    default:
                        System.out.println("请输入合法字符!");
                }
            }
            else{
                System.out.println("请输入合法字符!");
                break;
            }
        }
    }
    public static void Menu()
    {
        System.out.println("-------MENU-----");
        System.out.println("1.分析目录中的源程序文件");
        System.out.println("2.查看分析结果");
        System.out.println("0.退出程序");
        System.out.println("----------------");
        System.out.print("请选择:");
    }
}

2.分析

package main;

import java.io.*;
import java.util.Arrays;
import java.util.Scanner;

public class Deal {
    static int blank1=0;
    static Scanner sc=new Scanner(System.in);
    static String path=null;
    static File file=null;
    static File file1=new File("result");
    static PrintWriter writer;
    static int allLine=0,allBlankLine=0,allBytes=0,allFiles=0;
    static StringAlign align1=new StringAlign();

    public Deal() throws IOException {
    }

    public static void analysis() throws IOException {
        while (true){
            System.out.println("请输入目录:");
            path=sc.nextLine();
            file=new File(path);
            if(!file.exists()||!file.isDirectory())
            {
                System.out.println("["+file+"]不是目录名或者不存在!");
            }else
            {
                break;
            }
        }
        {
            try {
                writer = new PrintWriter(new BufferedWriter(new FileWriter(file1.getAbsolutePath()+"//"
                        +file.getName()+".txt")));
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        writer.write("["+file.getAbsolutePath()+"] Result:\n");
        writer.write("\n");
        writer.write("Files detail:\n");
        input(file,blank1);
        writer.write("Total:\n");
        writer.write("              "+align1.padLeft(allFiles+"",6)+align1.padLeft("Java Files",20)+"\n");
        writer.write("              "+align1.padLeft(allLine+"",6)+align1.padLeft("lines in files",20)+"\n");
        writer.write("              "+align1.padLeft(allBlankLine+"",6)+align1.padLeft("blank ines",20)+"\n");
        writer.write("              "+align1.padLeft(allBytes+"",6)+align1.padLeft("bytes",20)+"\n");
        writer.close();
    }



    public static void input(File file,int blank) throws IOException {
        File[] files = file.listFiles();
        if(files!=null)
        {
            Arrays.sort(files,((o1, o2) ->
            {
                if (o1.isDirectory()&&o2.isDirectory())
                {
                    return String.CASE_INSENSITIVE_ORDER.compare(o1.getName(),o2.getName());
                }
                if(o1.isDirectory())
                {
                    return 1;
                }
                if(o2.isDirectory())
                {
                    return -1;
                }
                return String.CASE_INSENSITIVE_ORDER.compare(o1.getName(),o2.getName());
            }));
        }
        if (file.isDirectory()) {
            for (int a = 0; a< blank; a++)
                writer.write(" ");
            writer.write("+"+file.getName()+"\n");
            for (int i = 0; i < files.length; i++) {
                input(files[i], blank + 4);
            }
        }
        else {
            if (file.getName().endsWith(".java")){
                allFiles++;
                allBytes += file.length();
                allBlankLine += countBlanks(file);
                allLine += countRows(file);
                for (int a = 0; a < blank; a++)
                    writer.write(" ");
                writer.write("-" +align1.padRight(file.getName(),50)+"Total:"+align1.padLeft(countRows(file)+"",5)
                        +",Blank:"+ align1.padLeft(countBlanks(file)+"",5)+","
                        +align1.padLeft(file.length()+"",5)+" Bytes\n");

            }





        }
    }


    public static int countRows(File file) throws IOException {
        int rows = 0;
        if (file.isFile()) {
            BufferedReader input = new BufferedReader(new FileReader(file));

            while (input.readLine() != null) {
                rows++;
            }

        }
        return rows;
    }


    public static int countBlanks(File file) throws IOException {
        int blanks = 0;
        if (file.isFile()) {
            BufferedReader input = new BufferedReader(new FileReader(file));

            String line = null;
            while ((line = input.readLine()) != null) {
                if (line.trim().equals("")) blanks++;
            }

        }
        return blanks;
    }

}

3.打印结果

package main;

import java.io.*;
import java.util.Scanner;

public class LookUp {
    static File file =new File("result");
    static File[] files=file.listFiles();
    static BufferedReader reader=null;
    public static void lookup() throws IOException {
        Menu();
        Choose();
    }

    public static void Menu(){

        if(!file.exists()||!file.isDirectory()||files.length==0){
            System.out.println("还没有分析结果!");
        }
        else {
            System.out.println("可以查看的结果文件有:");
            System.out.println("---------------------------");
            for (int i = 1; i <= files.length; i++) {
                System.out.println(i+"."+files[i-1].getName());
            }
            System.out.println("---------------------------");
            System.out.print("选择要查看的结果文件(0表示放弃):");
        }
    }

    public static void Choose() throws IOException {
        Scanner sc = new Scanner(System.in);
        if (sc.hasNextInt()) {
            int a = sc.nextInt();
            if (a < 0 || a > files.length) {
                System.out.println("请输入合法字符!");
            } else if (a == 0) {
                System.out.println("放弃,返回第一层选项");
            } else {
                Print(files[a - 1]);
            }
        }
        else {
            System.out.println("请输入合法字符!");
        }
    }
    public static void Print(File file2) throws IOException {
        if(file2.exists()&&file2.isFile()){
            reader=new BufferedReader(new FileReader(file2.getAbsolutePath()));
            int data;
            while((data = reader.read()) != -1){
                System.out.print((char)data);
            }
        }
    }
}

4.忘了哪个博客找到的类,虽然如今看来不是很高深的东西,但一直很遗憾没点赞,现在也找不到了。

空格补全对齐:

package main;

public class StringAlign {

    public static String padLeft(String origin, int length) {
        while (origin.length() < length) {
            origin = " " + origin;
        }
        return origin;
    }

    public static String padRight(String origin, int length) {
        while (origin.length() < length) {
            origin = origin + " ";
        }
        return origin;

    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值