Partial writing allows you to handle optional values in your data.
The full source for these examples can be found here.
As you can see in this example, we're only writing 5 of the available fields from the bean and 2 of those are optional.
This example demonstrates the two options you have when writing optional fields:
/**
 * An example of partial reading using CsvBeanWriter.
 */
private static void partialWriteWithCsvBeanWriter() throws Exception {
        
        // create the customer beans
        final CustomerBean john = new CustomerBean("1", "John", "Dunbar",
                new GregorianCalendar(1945, Calendar.JUNE, 13).getTime(),
                "1600 Amphitheatre Parkway\nMountain View, CA 94043\nUnited States", null, null,
                "\"May the Force be with you.\" - Star Wars", "jdunbar@gmail.com", 0L);
        final CustomerBean bob = new CustomerBean("2", "Bob", "Down",
                new GregorianCalendar(1919, Calendar.FEBRUARY, 25).getTime(),
                "1601 Willow Rd.\nMenlo Park, CA 94025\nUnited States", true, 0,
                "\"Frankly, my dear, I don't give a damn.\" - Gone With The Wind", "bobdown@hotmail.com", 123456L);
        final List<CustomerBean> customers = Arrays.asList(john, bob);
        
        ICsvBeanWriter beanWriter = null;
        try {
                beanWriter = new CsvBeanWriter(new FileWriter("target/partialWriteWithCsvBeanWriter.csv"),
                        CsvPreference.STANDARD_PREFERENCE);
                
                // only map 5 of the 10 fields
                final String[] header = new String[] { "customerNo", "firstName", "lastName", "married", "numberOfKids" };
                
                // assign a default value for married (if null), and write numberOfKids as an empty column if null
                final CellProcessor[] processors = new CellProcessor[] { new UniqueHashCode(), new NotNull(),
                        new NotNull(), new ConvertNullTo("no response", new FmtBool("yes", "no")), new Optional() };
                
                // write the header
                beanWriter.writeHeader(header);
                
                // write the customer beans
                for( final CustomerBean customer : customers ) {
                        beanWriter.write(customer, header, processors);
                }
                
        }
        finally {
                if( beanWriter != null ) {
                        beanWriter.close();
                }
        }
}Output:
customerNo,firstName,lastName,married,numberOfKids 1,John,Dunbar,no response, 2,Bob,Down,yes,0
This example is identical to the one above, but uses CsvListWriter.
/**
 * An example of partial reading using CsvListWriter.
 */
private static void partialWriteWithCsvListWriter() throws Exception {
        
        final String[] header = new String[] { "customerNo", "firstName", "lastName", "married", "numberOfKids" };
        
        // create the customer Lists (CsvListWriter also accepts arrays!)
        final List<Object> john = Arrays.asList(new Object[] { "1", "John", "Dunbar",null, null});
        final List<Object> bob = Arrays.asList(new Object[] { "2", "Bob", "Down", true, 0 });
        
        ICsvListWriter listWriter = null;
        try {
                listWriter = new CsvListWriter(new FileWriter("target/partialWriteWithCsvListWriter.csv"),
                        CsvPreference.STANDARD_PREFERENCE);
                
                // assign a default value for married (if null), and write numberOfKids as an empty column if null
                final CellProcessor[] processors = new CellProcessor[] { new UniqueHashCode(), new NotNull(),
                        new NotNull(), new ConvertNullTo("no response", new FmtBool("yes", "no")), new Optional() };
                
                // write the header
                listWriter.writeHeader(header);
                
                // write the customer Lists
                listWriter.write(john, processors);
                listWriter.write(bob, processors);
                
        }
        finally {
                if( listWriter != null ) {
                        listWriter.close();
                }
        }
}Output:
customerNo,firstName,lastName,married,numberOfKids 1,John,Dunbar,no response, 2,Bob,Down,yes,0
This example is identical to the others above, but uses CsvMapWriter. It also demonstrates that a null cell processor has the same effect as using new Optional().
/**
 * An example of partial reading using CsvMapWriter.
 */
private static void partialWriteWithCsvMapWriter() throws Exception {
        
        final String[] header = new String[] { "customerNo", "firstName", "lastName", "married", "numberOfKids" };
        
        // create the customer Maps (using the header elements for the column keys)
        final Map<String, Object> john = new HashMap<String, Object>();
        john.put(header[0], "1");
        john.put(header[1], "John");
        john.put(header[2], "Dunbar");
        john.put(header[3], null);
        john.put(header[4], null);
        
        final Map<String, Object> bob = new HashMap<String, Object>();
        bob.put(header[0], "2");
        bob.put(header[1], "Bob");
        bob.put(header[2], "Down");
        bob.put(header[3], true);
        bob.put(header[4], 0);
        
        ICsvMapWriter mapWriter = null;
        try {
                mapWriter = new CsvMapWriter(new FileWriter("target/partialWriteWithCsvMapWriter.csv"),
                        CsvPreference.STANDARD_PREFERENCE);
                
                // assign a default value for married (if null), and write numberOfKids as an empty column if null
                final CellProcessor[] processors = new CellProcessor[] { new UniqueHashCode(), new NotNull(),
                        new NotNull(), new ConvertNullTo("no response", new FmtBool("yes", "no")), null };
                
                // write the header
                mapWriter.writeHeader(header);
                
                // write the customer Maps
                mapWriter.write(john, header, processors);
                mapWriter.write(bob, header, processors);
                
        }
        finally {
                if( mapWriter != null ) {
                        mapWriter.close();
                }
        }
}Output:
customerNo,firstName,lastName,married,numberOfKids 1,John,Dunbar,no response, 2,Bob,Down,yes,0