本文将介绍怎样使用 Commons CSV 输出 CSV 数据到控制台、文件等。
import org.apache.commons.csv.CSVFormat; import org.apache.commons.csv.CSVPrinter; import static java.lang.System.out; /** * 打印头部,将 CSV 打印到控制台 * @author hxstrive.com 2021/12/26 */ public class CsvPrinterDemo1 { public static void main(String[] args) throws Exception { // 默认将 csv 打印到控制台 CSVPrinter printer = CSVFormat.DEFAULT.builder() .setHeader("ID", "NAME") .build() .print(out); printer.printRecord("100", "张三"); printer.printRecord("200", "李四"); printer.printRecord("300", "王五"); } }
注意:上面代码中的 out 是 System 中定义的一个静态常量,如下:
public final static PrintStream out = null;
即我们使用的 System.out.println() 中的 System.out。所以将上面代码改为如下代码也可以:
CSVPrinter printer = CSVFormat.DEFAULT.builder() .setHeader("ID", "NAME") .build() .print(System.out);
运行程序,控制台输出如下:
ID,NAME 100,张三 200,李四 300,王五
下面将介绍通过 BufferedWriter 将 CSV 数据直接输出到文件中,代码如下:
import org.apache.commons.csv.CSVFormat; import org.apache.commons.csv.CSVPrinter; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; /** * 将 CSV 内容打印到文件中 * @author hxstrive.com 2021/12/26 */ public class CsvPrinterDemo2 { public static void main(String[] args) throws Exception { BufferedWriter bufferedWriter = null; try { FileWriter writer = new FileWriter(new File( "demo_print.csv")); bufferedWriter = new BufferedWriter(writer); // 默认将 csv 打印到控制台 CSVPrinter printer = CSVFormat.DEFAULT.builder() .setHeader("ID", "NAME") .build() .print(bufferedWriter); printer.printRecord("100", "张三"); printer.printRecord("200", "李四"); printer.printRecord("300", "王五"); System.out.println("finished."); } finally { if(null != bufferedWriter) { bufferedWriter.flush(); bufferedWriter.close(); } } } }
将 CSV 内容输出到 StringBuffer,然后输出到控制台。代码如下:
import org.apache.commons.csv.CSVFormat; import org.apache.commons.csv.CSVPrinter; /** * 将 CSV 内容输出到 StringBuffer,然后输出到控制台 * @author hxstrive.com 2021/12/26 */ public class CsvPrinterDemo3 { public static void main(String[] args) throws Exception { StringBuffer buffer = new StringBuffer(); CSVPrinter printer = CSVFormat.DEFAULT.builder() .setHeader("ID", "NAME") .build() .print(buffer); printer.printRecord("100", "张三"); printer.printRecord("200", "李四"); printer.printRecord("300", "王五"); // 输出 CSV 内容 System.out.println(buffer.toString()); } }
注意:在 CSVFormat 中定义了两个 print() 方法,定义如下:
CSVPrinter print(Appendable out)
CSVPrinter print(File out, Charset charset)
第一个 print() 接收一个实现了 java.lang.Appendable 接口的类,在 JDK 中实现了 Appendable 接口的类大概有 BufferedWriter, CharArrayWriter, CharBuffer, FileWriter, FilterWriter, LogStream, OutputStreamWriter, PipedWriter, PrintStream, PrintWriter, StringBuffer, StringBuilder, StringWriter, Writer。
第二个 print() 方法接收一个 File 和输出内容的字符串编码。