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
- java Jfree,文件中代码检测: 完成每周记录,并实现折线图和饼状图
- JFREE折线图
- java中使用jfree饼图的实现
- 用Jfree实现条形柱状图表,java代码实现
- java代码取出EXCEL表数据并画折线图
- 基于JFree框架编写的饼图,柱状图,折线图
- Java实现对文件的操作,并记录文件中不同字母的个数
- MPChart实现饼状图和折线图
- 利用highcharts完成折线图。(纯java代码拼接js代码形成基础类,直接用方法即可)
- Jfree实现柱状图1
- Jfree实现统计图
- 什么!?几十行代码实现折线图!!!
- 替换文件中某个字符串并写入新内容(Java代码实现)
- 替换文件中某个字符串并写入新内容(Java代码实现)
- android中在java代码中获得每日,每周,每月的0点和24点的时间戳
- 记录访客的(ip,浏览器,ip归属地,操作系统代码)并记录在文件中
- JFreeChart实现饼状图、柱状图和折线图以及各类报表
- 原生js和canvas实现的 柱状图、饼状图、折线图
- iOS 自定义输入键盘
- Python内建函数:sorted
- 非常Strong的编程学习方法
- shc对Shell脚本加密方法及问题处理
- <%@ include file="include.jsp" %>学习小结
- java Jfree,文件中代码检测: 完成每周记录,并实现折线图和饼状图
- Django 静态文件访问问题
- MFC中的GDI/GDI+和双缓冲绘图
- 原型模式-Prototype Pattern 对象的克隆——原型模式(二):工作周报的原型模式解决方案
- Photos 框架实践以及坑
- Storm Trident state 原理
- REDO LOG损坏恢复(—)
- 架构设计:系统存储(10)——MySQL简单主从方案及暴露的问题
- 通过Uri提取URL后参数列表