java Jfree,文件中代码检测: 完成每周记录,并实现折线图和饼状图

来源:互联网 发布:企管家软件 编辑:程序博客网 时间:2024/06/18 04:54

先需要导入两个包:jreechar-1.0.13 jcommon1.0.16
下载地址:https://cn.jarfire.org/jcommon.html
https://cn.jarfire.org/jfreechart.html

这里写图片描述

代码:

package com.oracle.test.Jfree;import java.awt.Color;import java.awt.Font;import java.io.BufferedReader;import java.io.File;import java.io.FileReader;import java.io.IOException;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Date;import java.util.List;import org.jfree.chart.ChartFactory;import org.jfree.chart.ChartFrame;import org.jfree.chart.JFreeChart;import org.jfree.chart.StandardChartTheme;import org.jfree.chart.axis.AxisSpace;import org.jfree.chart.labels.ItemLabelAnchor;import org.jfree.chart.labels.ItemLabelPosition;import org.jfree.chart.labels.StandardXYItemLabelGenerator;import org.jfree.chart.plot.XYPlot;import org.jfree.chart.renderer.xy.XYItemRenderer;import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;import org.jfree.chart.title.TextTitle;import org.jfree.data.general.DefaultPieDataset;import org.jfree.data.time.TimeSeries;import org.jfree.data.time.TimeSeriesCollection;import org.jfree.data.time.Year;import org.jfree.ui.RectangleInsets;import org.jfree.ui.TextAnchor;public class CodeCounterGrow {    static int count = 0;    static List<Long> list = new ArrayList<>();    static List<Integer> gettime = new ArrayList<>();    static String str = "20160808";    static SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");    static Long time;    static int num = 0;    public static void sum() {        try {            time = sdf.parse(str).getTime();        } catch (Exception e) {            // TODO: handle exception        }        list.add(time);        for (; time < System.currentTimeMillis(); num++) {            time += 7 * 24 * 60 * 60 * 1000;            list.add(time);            gettime.add(0);        }    }    public static void checkAll(File file) {        if (file.isFile()) {            if (file.getName().endsWith(".java")) {// 如果是文件再判断是不是java文件                long ltime = file.lastModified();// 返回文件最后修改时间,是以个long型毫秒数                try (BufferedReader br = new BufferedReader(                        new FileReader(file));) {                    for (int i = 0; i < num; i++) {// 了解到try,catch居然会影响for!                        if (ltime < list.get(i + 1)) {                            String str = null;                            while ((str = br.readLine()) != null) {// 查询整行代码,用readLine换行处理                                if (!str.trim().equals(""))// 去掉无代码的空行                                {                                    gettime.set(i, gettime.get(i) + 1);                                    count++;                                }                            }                            break;                        }                    }                } catch (IOException e) {                    e.printStackTrace();                }                System.out.println(" " + file.getName());            }        } else if (file.isDirectory()) {            File[] files = file.listFiles();// 如果是目录,就遍历目录下的所以目录或文件            for (File f : files) {                checkAll(f);                // System.out.println(f.getName());            }        }    }    public static void outPut(File file) {        sum();        checkAll(file);        int he = 0;        for (int a : gettime) {            he += a;        }        he /= num;        System.out.println("每周写代码情况:");        for (int i = 0; i < num; i++) {            String stime = new SimpleDateFormat("yyyy-MM-dd")                    .format(new Date(list.get(i)));            String etime = new SimpleDateFormat("yyyy-MM-dd")                    .format(new Date(list.get(i + 1) - 1));            System.out.print("第" + (i + 1) + "周:" + " 从" + stime + "到" + etime                    + "时间里,写了  " + gettime.get(i) + "行java代码     ");            if (gettime.get(i) > he) {                System.out.println("超过周平均水平");            } else {                System.out.println("低于周平均水平");            }        }        draw();        outPut2();    }    public static void draw() {        // 首先构造数据        @SuppressWarnings("deprecation")        TimeSeries timeSeries = new TimeSeries("java代码量", Year.class);        // 时间曲线数据集合        TimeSeriesCollection lineDataset = new TimeSeriesCollection();        // 构造数据集合        for (int i = 0; i < num; i++) {            timeSeries.add(new Year(i + 1), gettime.get(i));        }        lineDataset.addSeries(timeSeries);        JFreeChart chart = ChartFactory.createTimeSeriesChart("", "date", "num",                lineDataset, true, true, true);        // 增加标题        chart.setTitle(                new TextTitle("周代码变化量", new Font("隶书", Font.ITALIC, 20)));        chart.setAntiAlias(true);        XYPlot plot = (XYPlot) chart.getPlot();        plot.setAxisOffset(new RectangleInsets(10, 10, 10, 10));// 图片区与坐标轴的距离        plot.setOutlinePaint(Color.PINK);        plot.setInsets(new RectangleInsets(15, 15, 15, 15));// 坐标轴与最外延的距离        // plot.setOrientation(PlotOrientation.HORIZONTAL);//图形的方向,包括坐标轴。        AxisSpace as = new AxisSpace();        as.setLeft(25);        as.setRight(25);        plot.setFixedRangeAxisSpace(as);        chart.setPadding(new RectangleInsets(5, 5, 5, 5));        chart.setNotify(true);        // 设置曲线是否显示数据点        XYLineAndShapeRenderer xylineandshaperenderer = (XYLineAndShapeRenderer) plot                .getRenderer();        xylineandshaperenderer.setBaseShapesVisible(true);        // 设置曲线显示各数据点的值        XYItemRenderer xyitem = plot.getRenderer();        xyitem.setBaseItemLabelsVisible(true);        xyitem.setBasePositiveItemLabelPosition(new ItemLabelPosition(                ItemLabelAnchor.INSIDE10, TextAnchor.BASELINE_LEFT));        xyitem.setBaseItemLabelGenerator(new StandardXYItemLabelGenerator());        xyitem.setBaseItemLabelFont(new Font("Dialog", 1, 14));        plot.setRenderer(xyitem);        // 显示        ChartFrame frame = new ChartFrame("java", chart);        frame.pack();        frame.setVisible(true);    }    public static void outPut2() {        StandardChartTheme sct = new StandardChartTheme("CN");        sct.setExtraLargeFont(new Font("隶书", Font.BOLD, 20));        sct.setRegularFont(new Font("隶书", Font.BOLD, 20));        sct.setLargeFont(new Font("隶书", Font.BOLD, 20));        DefaultPieDataset dataset = new DefaultPieDataset();        for (int i = 0; i < num; i++) {            String str = "第" + (i + 1) + "周";            dataset.setValue(str, gettime.get(i));        }        ChartFactory.setChartTheme(sct);        JFreeChart jfreechart = ChartFactory.createPieChart3D("周代码量图", dataset,                true, true, true);        ChartFrame frame = new ChartFrame("java代码量", jfreechart);        frame.setVisible(true);        frame.pack();    }    public static void main(String[] args) {        File file = new File("F:\\学习\\jgw");        outPut(file);        System.out.println("共写java代码:" + count + "行");    }}

这里写图片描述
这里写图片描述

0 0