2016-12-06 17 views
0

特定の形式のCSVファイルを作成する必要があります。ここにフォーマットがあります。JavaでCSVファイルを作成する

“ROWHEAD”,2016/09/13 03:24:42 -0700,”A”,”BCDE”,002, 
“SECHEAD”,2016/09/12 00:00:00 -0700,2016/09/12 23:59:59 -0700,”BCDE” 

“COLHEAD”,”Col A”,”Col B”,”Col C”,”Col D”,”Col E”,”Col F” 
“SECBODY”,”val A”,”val B”,”val C”,”val D”,”val E”,”val F” 
“SECBODY”,”val A”,”val B”,”val C”,”val D”,”val E”,”val F” 
“SECBODY”,”val A”,”val B”,”val C”,”val D”,”val E”,”val F” 
“SECBODY”,”val A”,”val B”,”val C”,”val D”,”val E”,”val F” 

“SECFOOT”,”XXX”,0,0,0,0,”YY”,0,”ZZ”,0,189 
“SECCOUNT”,1 
"ROWFOOT”,”XXX”,0,0,0,0,”YY”,0,”ZZ”,0,189 

私はこれを達成するのに役立つことができなかった通常のファイルライターの方法を使ってみました。また、openCSV APIを同じものにしようとしていても、それほど役に立たない。

ヘッダーとフッターの値が関連付けられたCSVファイルを作成するにはどうすればよいですか?

+1

Javaを使用してどのような問題が発生しましたか?あなたのコードに特定の問題がありますか? –

+0

これを行うにはcsvwriterクラスを使用します。 (opencsv) –

+0

@Tim - CSVファイルを通常のFileWriterとして書くことができました。レコードが大きくなると処理が難しくなります。 OpenCSVを使用していますが、そのすべてを文字列として記述していますが、日付形式も持っています。 – i2ijeya

答えて

2

これを処理するにはuniVocity-parsersを取得してください。それにはOutputValueSwitchがあり、これは各行の特定の列の値と一致して使用するRowProcessorを決定します。あなたはまた、入力行としてマップを使用することができます

OutputValueSwitch writerSwitch = new OutputValueSwitch(0); //row identifiers go at column 0 

    // If the value is "ROWHEAD", we want to use an BeanWriterProcessor. You can provide field names to be associated with the fields in the class. 
    writerSwitch.addSwitchForValue("ROWHEAD", new BeanWriterProcessor(RowHead.class)); 

    writerSwitch.addSwitchForValue("SECHEAD", new BeanWriterProcessor(SecHead.class)); 

    // If the value is "SECBODY", a ObjectRowWriterProcessor will be used. Let's assume you are writing object arrays here 
    writerSwitch.addSwitchForValue("SECBODY", new ObjectRowWriterProcessor()); 
    //...and so on. 

    //Configure the CSV writer here 
    CsvWriterSettings settings = new CsvWriterSettings(); 
    // the writer should use the switch defined above 
    settings.setRowWriterProcessor(writerSwitch); 

    settings.getFormat().setLineSeparator("\n"); 
    settings.setHeaderWritingEnabled(false); 
    //etc 

    //Create the CSV writer 
    CsvWriter writer = new CsvWriter(new File("/path/to/your.csv"), "UTF-8", settings); 

    writer.processRecord(new RowHead()); //writing bean 
    writer.processRecord(new SecHead()); //writing the other bean 
    writer.processRecord(new Object[]{"SECBODY", "Value 1", "Value 2", "etc"}); //writing an array 

    writer.close(); 

:あなたの入力行はJavaの豆(それはおそらくないもの)、およびいくつかの他の行から生成されている場合

は例えば、オブジェクト配列の平野リストです。完全に動作するサンプルについては、thisthis

を参照してください。このライブラリで何かできることがあれば、私はあなたに役立つことを願っています。

開示:私はこのライブラリの作者です。オープンソースで無料(Apache V2.0ライセンス)です。

+0

ありがとう@Jeronimo。私はこれを試してみる。これが私の必要性を満たすことを望みます。 – i2ijeya

関連する問題