用HashMap在java中创build一个CSV文件

我有一个关于一些关键是指示一个关键的键在java中的哈希映射。 然后显示每个数据包静态的每个值都属于该stream。

我需要做的是根据这些值为每个stream绘制graphics。 例如:

Flow1: {[length, time],[],[],...} Flow2: {[length, time],[length, time],[],...} 

我需要创build一个CSV文件,然后可以从MS Excel中读取。 任何人都有想法给我一些线索吗?

编辑:这是我的hashMap:

  Iterator<Flows> iterator = myHashMap.keySet().iterator(); String fileName = ((args.length > 0) ? args[0] : "jexcel.xls"); Map<String, ArrayList> csv = new HashMap<String, ArrayList>(); int i=0; while(iterator.hasNext()){ Flows key = iterator.next(); ArrayList value = myHashMap.get(key); csv.put("Flow["+i+"]", value); } 

您可以使用以下API。

POI: http : //poi.apache.org

javacsv: http : //sourceforge.net/projects/javacsv

JExcel: http ://jexcelapi.sourceforge.net/

opencsv: http ://opencsv.sourceforge.net/

以下是使用supercsv api写入csv 示例 :

 import java.io.FileWriter; import java.util.HashMap; import org.supercsv.io.*; import org.supercsv.prefs.CsvPreference; public class CSVWriteExample { /** * @param args */ public static void main(String[] args) throws Exception{ ICsvMapWriter writer = new CsvMapWriter(new FileWriter("person.csv"), CsvPreference.EXCEL_PREFERENCE); try { final String[] header = new String[] { "name", "city", "pin" }; // set up some data to write final HashMap<string, ?="" super="" object=""> data1 = new HashMap<string, object="">(); data1.put(header[0], "Raj"); data1.put(header[1], "Vijayawada"); data1.put(header[2], 500026); final HashMap<string, ?="" super="" object=""> data2 = new HashMap<string, object="">(); data2.put(header[0], "Suneel"); data2.put(header[1], "Tenali"); data2.put(header[2], 522202); // the actual writing writer.writeHeader(header); writer.write(data1, header); writer.write(data2, header); System.out.println("Writing Completed...!"); } finally { writer.close(); } } } 

在stackoverflow上也可以find真实的问题:

你可以推荐一个Java库来阅读(也可能写入)CSV文件吗?

适用于Java的CSV API

如果你真的想要一个Excel文件,创build一个最好的库是安迪汗的JExcel 。

我想你会需要一个工作表,每个stream,每个.csv对,按时间sorting。

如果这些是variables对时间的图表,那么“时间”是不是每一对中的第一个值?

这是我该怎么做的。 它适用于我提供的简单testing用例 – 它是可以扩展的工作代码。

 package jexcel; import jxl.Workbook; import jxl.write.WritableSheet; import jxl.write.WritableWorkbook; import jxl.write.WriteException; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class JExcelUtils { public static void main(String[] args) { String fileName = ((args.length > 0) ? args[0] : "jexcel.xls"); Map<String, List<Pair>> csv = new HashMap<String, List<Pair>>() {{ put("Flow1", fromArrayToList(new double[][] { { 0.0, 0.0 }, { 0.1, 1.0 }, { 0.2, 2.0 }, { 0.3, 3.0 }, { 0.4, 4.0 }, { 0.5, 5.0 }, })); put("Flow2", fromArrayToList(new double[][] { { 0.0, 0.0 }, { 0.1, 1.0 }, { 0.2, 4.0 }, { 0.3, 9.0 }, { 0.4, 16.0 }, { 0.5, 25.0 }, })); }}; WritableWorkbook excelContents = null; try { File excelFile = new File(fileName); excelContents = createExcel(excelFile, csv); excelContents.write(); } catch (IOException e) { e.printStackTrace(); } catch (WriteException e) { e.printStackTrace(); } finally { try { if (excelContents != null) excelContents.close(); } catch (Exception e) { e.printStackTrace(); } } } public static List<Pair> fromArrayToList(double [][] input) { List<Pair> result = new ArrayList<Pair>(); for (int i = 0; i < input.length; ++i) { result.add(new Pair(input[i][0], input[i][1])); } return result; } public static WritableWorkbook createExcel(File excelFile, Map<String, List<Pair>> worksheets) throws IOException, WriteException { WritableWorkbook result = Workbook.createWorkbook(excelFile); int order = 0; for (String worksheetName : worksheets.keySet()) { WritableSheet worksheet = result.createSheet(worksheetName, order++); List<Pair> worksheetValues = worksheets.get(worksheetName); for (int row = 0; row < worksheetValues.size(); ++row) { worksheet.addCell(new jxl.write.Number(0, row, worksheetValues.get(row).getX())); worksheet.addCell(new jxl.write.Number(1, row, worksheetValues.get(row).getY())); } } return result; } } class Pair { private double x; private double y; Pair(double x, double y) { this.x = x; this.y = y; } public double getX() { return x; } public double getY() { return y; } }