
// CSVWriter.java
// Andrew Davison, ad@coe.psu.ac.th, Nov. 2022

/* Read in a specified CSV file, which is assumed to 
   have a header line, and then save it to out-fnm.

    Usage:
      > compile CSVWriter.java
      > run CSVWriter <in-fnm> <out-fnm>
    e.g.
      > run CSVWriter oofilters.csv copy.csv

*/

import java.io.*;
import java.util.*;

import org.apache.commons.csv.*;


public class CSVWriter 
{
  public static void main(String[] args)
  {
    if (args.length != 2) {
      System.out.println("Usage: run CSVWriter <in-fnm> <out-fnm>");
      return;
    }

    try {
      Reader in = new FileReader(args[0]);

      CSVFormat.Builder builder = CSVFormat.DEFAULT.builder();
      CSVFormat format = builder.setHeader().
                           setSkipHeaderRecord(true).build();

      CSVParser parser = new CSVParser(in, format);

      List<String> headers = parser.getHeaderNames();
      List<CSVRecord> records = parser.getRecords();  
                              // read all records at once
      saveCSV(args[1], headers, records);
    }
    catch(IOException e)
    { System.out.println(e);  }
  }  // end of main()


  private static void saveCSV(String fnm, List<String> headers,
                             List<CSVRecord> records)
                                       throws IOException
  // Create a headed CSV file called fnm
  {
    System.out.println("Saving data to " + fnm);
    CSVPrinter printer = 
         new CSVPrinter(new FileWriter(fnm), CSVFormat.DEFAULT);
    printer.printRecord(headers);
    for(CSVRecord record : records) {
      printer.printRecord(record);
    }
    printer.close(true);
  }  // end of saveCSV()

} // end of CSVWriter class