CsvWriter.java
<code>import java.io.ByteArrayOutputStream;
import java.io.Closeable;
import java.io.FilterOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.util.Collection;
/**
* Composes CSV data for collection of objects. Relays on theirs {@link Object#toString toString()} implementation.<br>
* Could use memory buffer for the data or write straight to the output stream.
* <p>
* Example 1:
*
* <pre>
* Object[][] data = ...
*
* CsvWriter writer = new CsvWriter();
* writer.write("Column 1", "Column 2", ... "Column N");
* for (Object[] values : data)
* writer.write(values);
* ...
* System.out.println(writer.toString());
*
*
* Пример 2: * *
* Object[][] data = ...
*
* CsvWriter writer = null;
* try {
* writer = new CsvWriter(new FileOutputStream(new File("data.csv")));
* writer.write("Column 1", "Column 2", ... "Column N");
* for (Object[] values : data)
* writer.write(values);
* } finally {
* writer.close();
* }
*
* * @author Михайло Адамович * / открытый класс CsvWriter реализует Closeable {public static final String NULL_MARK = "";public static final String QUOTE = "\" "; private String nullMark = NULL_MARK; private final PrintWriter pw; private ByteArrayOutputStream baos; / ** * Создает временный буфер в памяти.
* Use {@link #toString ()}после этого. Не нужно закрывать. * / public CsvWriter () {baos = new ByteArrayOutputStream (); pw = new PrintWriter (baos, true);} / ** * Не использует память для данных CSV, записывает прямо в выводпоток. Точно так же, как {@link FilterOutputStream}, но имеет дело с объектами и реле в их * реализации {@link Object # toString toString ()}.
* После этого закройте средство записи. * * @param os * выходной поток для записи данных. * / public CsvWriter (OutputStream os) {pw = new PrintWriter (os, true);} защищенный String composeRecord (Object ... values) {if (values == null || values.length == 0) return ""; final StringBuffer csvRecord = new StringBuffer (); csvRecord.append (QUOTE); csvRecord.append (composeValue (values [0]));; csvRecord.append (QUOTE); для (int i = 1; i
пример:
public class MyClass {
private Object[][] data;
//...
@Override
public String toCsv() {
CsvWriter writer = new CsvWriter();
csvWriter.write("Column1", "Column2")
for (final Object[] values : data)
csvWriter.write(values);
return writer.toString();
}
}