2010-08-15 13 views
1

각 키가 흐름을 나타내는 일부 키의 관점에서 java에 hashMap이 있습니다. 그런 다음 각 패킷에 대한 통계를 보여주는 각 값이 해당 흐름에 속합니다.HashMap에서 java에서 CSV 파일 만들기

내가해야할 일은, 그 값을 기반으로 각 흐름에 대한 그래프를 그리는 것입니다. 예 :

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

MS Excel에서 읽을 수있는 CSV 파일을 만들어야합니다. 누구든지 내게 약간의 단서를 주겠다는 생각을 갖고 있습니까? 편집

: 당신은 API의의를 다음에서 사용할 수 있습니다

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

: 여기 내 해시 맵입니다.

POI : http://poi.apache.org

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

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

opencsv :

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(); 
     } 
} 
} 
: http://opencsv.sourceforge.net/

다음은 supercsv API를 사용 example를 CSV로에는 writting되고 유래에개

또한 realted 질문 찾을 수 있습니다

Can you recommend a Java library for reading (and possibly writing) CSV files?

CSV API for Java

+0

감사합니다. 당신이 제안한 링크를 읽으면서 혼란 스러웠습니다. 지금 제공 한 코드를 살펴 보겠습니다. –

+0

@Red Lion 예. CSV에 쓰기위한 옵션이 너무 많습니다. 너 같은 단순한 경우에는 아무 문제없이 실제로 이것들을 사용할 수있다. – YoK

+0

제 코드를 보시고 제 게시물을 편집 해 주실 수 있습니까? –

2

당신이 정말로 Excel 파일을 원하는 경우, 하나를 만들기위한 최선의 라이브러리 Andy Khan's 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; 
    } 
} 
+0

예, 정확하게 확인하십시오. 각 흐름마다 하나의 시트가 필요합니다. 나는 그것을 전혀 어렵지 않게 순서를 바꿀 수있다. –

+0

먼저 감사합니다. secondly이 프로그램의 출력을 Excel에서 어떻게 볼 수 있습니까? –

+0

@ duffymo : 내 값은 arrayList이고이 맵에 의해 my 값은 double [] []이어야합니다. –