用java怎样将一个文件中特定行列的数据读取出来
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用java怎样将一个文件中特定行列的数据读取出来相关的知识,希望对你有一定的参考价值。
文件内容比较多,但我需要从以下部分提取出特定的数据和信息:
......
_dataStart
Number Name A B Value ;
1-1 ABCDD -4.8341 0.5322 0.01 ;
1-2 AABD -4.8754 0.5566 0.00 ;
2-1 CABEDEE 3.4261 0.5246 0.02 ;
......
希望得到一个数组为name[] = "ABCDD","AABD","CABEDEE",即第二列,或者说Name那列;
另外一个数组包括数据:列A和列Value,可以是二维数组-4.8341,0.01,-4.8754,0.00,3.4261,0.02,
或者两个一维数组,A[]和Value[]。
本人比较菜,正在学习中,希望大侠们指教。
能否具体详细一点说……
另外,获取出来的数据要用于计算的,是否要转换格式?
这个我知道了。。。Float.parseFloat()
需要详细的步骤啊。。。我码了半天,总是有这样那样的错误。
#Number Name A B Value;
当读到某行是以#开始的,表明这个不是数据,而是列名,然后把读取的列存放到一个数组中,你可以在列名之间使用分隔符,比如:
# Number : Name : A : B : Value;
通过读取指定的列名,你可以得到,列名在数组中对应的索引值。
对于存放数据的列就不加#,或者换成其他的标识符,同样把读取的数据行拆分存放到数组中,然后这样就很方便的找到列名所对应的列的数据了。
如果是读取行,那也很方便。
建议别使用,String col [] = row.split(":");来拆分数组,最好使用StringBuffer,或char数据来进行拆分操作。 参考技术A 读文件那个,可以把一行数据根据空格符分割为五个字符串,循环的写到6个长度的字符串数据组中;在循环里控制,只读取下标为1的数组。根据你上面的数组,如果这个文件很长,name列多,明显该数组长度会很大,这个时候不建议你用数组,可以用集合类来做。
后面的二维数组,你都可以再循环读取文件里做,只要根据数组下标取你想要的数据就可以了。 参考技术B BufferedReader的readLine() 读取一个文本行,然后进行字符串截取,这个应该可以获取到你的数据。 参考技术C 用select语句只取name那列,循环取酒可以,将每次取的数据放入数组。
怎样用柱状图实现mysql数据库中的数据,现在我不知道怎么将数据库中的数据读取出来显示在柱状图上
请大家帮帮忙把 谢谢了
我是用jfreechart做的 就是将数据库中的数据取出来显示在柱状图上 应该怎么做 ?
public static String generateBarChart(HttpSession session, PrintWriter pw,int w, int h,ArrayList list)
String filename = null;
try
CategoryDataset dataset = createDataset(list);
JFreeChart chart = ChartFactory.createBarChart(
"",//图表标题
"",//X轴标题
"",//Y轴标题
dataset,//数据集合
PlotOrientation.VERTICAL,//图表显示方向(水平、垂直)
true,//是否使用图例
true,//是否使用工具提示
false//是否为图表增加URL
);
/*------------配置图表属性--------------*/
chart.setBackgroundPaint(Color.white); // 1,设置整个图表背景颜色
CategoryPlot plot = chart.getCategoryPlot(); /*------------设定Plot参数-------------*/
plot.setBackgroundPaint(Color.white); // 2,设置详细图表的显示细节部分的背景颜色
plot.setDomainGridlinePaint(Color.black); // 3,设置垂直网格线颜色
plot.setDomainGridlinesVisible(false); // 4,设置是否显示垂直网格线
plot.setRangeGridlinePaint(Color.yellow); // 5,设置水平网格线颜色
plot.setRangeGridlinesVisible(false); //6,设置是否显示水平网格线
/*---------将所有数据转换为整数形式---------*/
final NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
/*---------设置是否在柱图的状态条上显示边框----*/
CategoryItemRenderer renderer = (CategoryItemRenderer) plot.getRenderer();
BarRenderer render = (BarRenderer) plot.getRenderer();
// render.setItemMargin(0.0);
// render.setMinimumBarLength(0.0);
/*---------设置状态条颜色的深浅渐变-----------*/
GradientPaint gp0 = new GradientPaint(0.0f, 0.0f, new Color(255,200, 80), 0.0f, 0.0f, new Color(255, 255, 40));
GradientPaint gp1 = new GradientPaint(0.0f, 0.0f, new Color(50,255, 50), 0.0f, 0.0f, new Color(100, 255, 100));
GradientPaint gp2 = new GradientPaint(0.0f, 0.0f, Color.red, 0.0f,0.0f, new Color(255, 100, 100));
GradientPaint gp3 = new GradientPaint(0.0f, 0.0f, new Color(108,108, 255), 0.0f, 0.0f, new Color(150, 150, 200));
renderer.setSeriesPaint(0, gp0);
renderer.setSeriesPaint(1, gp1);
renderer.setSeriesPaint(2, gp2);
renderer.setSeriesPaint(3, gp3);
/*
*
* 解决柱状体与图片边框的间距问题
*
*
* */
/*------设置X轴标题的倾斜程度----*/
CategoryAxis domainAxis = plot.getDomainAxis();
domainAxis.setCategoryLabelPositions(CategoryLabelPositions.createUpRotationLabelPositions(Math.E / 6.0));
/*------设置柱状体与图片边框的左右间距--*/
domainAxis.setLowerMargin(0.06);
domainAxis.setUpperMargin(0.06);
/*------设置柱状体与图片边框的上下间距---*/
ValueAxis rAxis = plot.getRangeAxis();
rAxis.setUpperMargin(0.3);
rAxis.setLowerMargin(0.3);
/*---------设置每一组柱状体之间的间隔---------*/
render.setItemMargin(0.01);
/*
*
* 解决柱状体与图片边框的间距问题
*
*
* */
/*
*
*
* 解决JFREECHART的中文显示问题
*
*
* */
/*----------设置消除字体的锯齿渲染(解决中文问题)--------------*/
chart.getRenderingHints().put(RenderingHints.KEY_TEXT_ANTIALIASING,RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);
/*----------设置标题字体--------------------------*/
TextTitle textTitle = chart.getTitle();
textTitle.setFont(new Font("黑体", Font.PLAIN, 20));
/*------设置X轴坐标上的文字-----------*/
domainAxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 11));
/*------设置X轴的标题文字------------*/
domainAxis.setLabelFont(new Font("宋体", Font.PLAIN, 12));
/*------设置Y轴坐标上的文字-----------*/
rAxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 14));
/*------设置Y轴的标题文字------------*/
rAxis.setLabelFont(new Font("黑体", Font.PLAIN, 12));
/*---------设置柱状体上的显示的字体---------*/
renderer.setBaseItemLabelFont(new Font("宋体", Font.PLAIN, 12));
renderer.setBaseItemLabelGenerator(new LabelGenerator(0.0));
renderer.setBaseItemLabelsVisible(true);
/*
*
*
* 解决JFREECHART的中文显示问题
*
*
* */
/*------得到chart的保存路径----*/
ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());
filename = ServletUtilities.saveChartAsPNG(chart, w, h, info,session);
/*------使用printWriter将文件写出----*/
ChartUtilities.writeImageMap(pw, filename, info, true);
pw.flush();
catch (Exception e)
System.out.println("Exception - " + e.toString());
e.printStackTrace(System.out);
filename = "public_error_500x300.png";
return filename;
/*-------------设置柱状体顶端的数据显示--------------*/
static class LabelGenerator implements CategoryItemLabelGenerator
private double threshold;
public LabelGenerator(double threshold)
this.threshold = threshold;
public String generateLabel(CategoryDataset dataset, int row, int column)
String result = null;
final Number value = dataset.getValue(row, column);
if (value != null)
final double v = value.doubleValue();
if (v > this.threshold)
result = value.toString();
return result;
public String generateRowLabel(CategoryDataset dataset, int row)
return null;
public String generateColumnLabel(CategoryDataset dataset, int column)
return null;
/*-----------数据封装-------------*/
private static CategoryDataset createDataset(ArrayList list)
String s1 = "1";
String s2 = "2";
String c1 = "1";
String c2 = "2";
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.setValue(44, s1, c1);
dataset.setValue(48, s2, c2);
return dataset;
比较完整的一个得到柱图的代码,保存路径是临时文件,怎么从数据库取值应该会吧。把dataset处理一下就可以了。 参考技术A 1.先用php算出数据在数据库中占的比例,
2.然后把这个值赋给柱状图的css样式属性(height),
3.给这个样式加一个背景颜色或者背景图(背景图的话别忘了设置背景图片定位方式) 参考技术B 哪有这么麻烦..你如果是用的java直接使用jfreechart
以上是关于用java怎样将一个文件中特定行列的数据读取出来的主要内容,如果未能解决你的问题,请参考以下文章