2016-12-06 4 views
0

Мне нужно создать файл CSV в определенном формате. Вот формат.Создать CSV-файл в Java

“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, но он записывает все как String, но у меня также есть формат даты. – i2ijeya

ответ

2

Получить uniVocity-parsers, чтобы справиться с этим. Он имеет OutputValueSwitch, который будет соответствовать значению в конкретном столбце каждой строки, чтобы определить RowProcessor для использования.

Например, если ваши входные строки генерируются из Java Beans (который он, вероятно, делает), и некоторые других строк являются простыми списками массивов объектов:

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

Вы также можете использовать карты в качестве входных строк. Для получения полных рабочих примеров см. this и this

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

Раскрытие информации: Я являюсь автором этой библиотеки. Это бесплатно и бесплатно (лицензия Apache V2.0).

+0

Спасибо @Jeronimo. Я попробую это. Надеюсь, это удовлетворит мою потребность. – i2ijeya