Создание файла CSV в Java из HashMap - PullRequest
1 голос
/ 15 августа 2010

У меня есть hashMap в java с точки зрения некоторых ключей, каждый ключ указывает поток.Затем каждое значение, показывающее статические значения для каждого пакета, принадлежит этому потоку.

Что мне нужно сделать, так это нарисовать графики для каждого потока на основе этих значений.например:

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

Мне нужно создать файл 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);


    }

Ответы [ 2 ]

2 голосов
/ 15 августа 2010

Если вам действительно нужен файл Excel, лучшая библиотека для его создания - JExcel Энди Кхана .

Я думаю, вам понадобится один лист на поток, с парами .csv для каждого, отсортированные по времени.

Если это графики зависимости переменной от времени, не будет ли "время" первым значением в каждой паре?

Вот как я это сделаю. Он отлично работает для простого тестового примера, который я предоставил - это рабочий код, который вы сможете расширить.

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;
    }
}
2 голосов
/ 15 августа 2010

Вы можете использовать следующие API.

POI: http://poi.apache.org

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

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

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

Ниже приводится запись в csv пример с использованием API-интерфейса supercsv:

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();  
      }  
 }
}

Также можно найти ответы на вопросы о стеке потока:

Можете ли вы порекомендовать библиотеку Java для чтения (и, возможно, записи) файлов CSV?

CSV API для Java

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...