前言
本文介绍利用apache的commons-csv相关类进行csv数据的输出。
实现的功能是在java代码中进行csv文本的输出,同时我们知道csv数据可以用excel打开
提示:以下是commons-csv包的下载路径,下载Binaries版本找到里面的commons-csv.jar包
https://commons.apache.org/proper/commons-csv/download_csv.cgi
一、设置输出文件位置和输出流
File file = new File("D:");//输出csv文件到d盘
// if (!file.exists()) {
// file.mkdirs();
// }
Appendable printWriter = null;//指定GBK,解决Microsoft不兼容
try {
printWriter = new PrintWriter(file + "/虚词统计.CSV","GBK");
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
CSVPrinter csvPrinter = null;
文件位置可以自行定义
二、输出表格头部
csvPrinter = CSVFormat.EXCEL.withHeader("","第一列","第二列","第三列").print(printWriter);
注意:输出流是要包含在try catch块中的
以下是我的包含在try catch块中的整体代码,其中有各行的输出,在第三部分会接着介绍(当然具体输出什么由你决定)
try {
csvPrinter = CSVFormat.EXCEL.withHeader("","而","乎","何","乃","其","且","若","所","为","焉","以","因","于","与","也","则","者","之").print(printWriter);//具体头部由你自己决定
for(int i=1;i<=chapterNumber;i++){//具体输出什么由你自己决定
csvPrinter.print("第"+i+"章");
for (int j = 0; j < 18; j++) {
csvPrinter.print(count[i][j]);
}
csvPrinter.println();
csvPrinter.flush();
}
csvPrinter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
三、输出每一行的内容
1.输出一个单元格
csvPrinter.print("一个单元格");
2. 换行刷新
csvPrinter.println();
csvPrinter.flush();
这样可以利用循环一格一格输出你的内容,利用csvPrinter.println()可以换行
3.整行输出
当然你不想一个单元格一个单元格进行输出,可以整行输出
csvPrinter.printRecord("第一格" , "第二格","第三格");//进行整行输出
四、我的示例代码
我的代码是对一个文本进行统计其每章虚词的个数,并用csv进行输出,可以直接用excel进行打开。了解上方所述的基本commons-csv的应用就可以简单的输出自己相要的表格了
package com.company;
import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.CSVPrinter;
import java.awt.*;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) {
/* 文件读取 */
String str="";
BufferedReader reader = null;
try {
reader = new BufferedReader(new InputStreamReader(
new FileInputStream("D:\\red.txt"), "utf-8"));
while (reader.ready()) {
String line = reader.readLine();
str+=line;
}
reader.close();
}
catch (Exception e) {
e.printStackTrace();
}
str.replaceAll("\\s*", "");//去掉空格
String []empty={"而","乎","何","乃","其","且","若","所","为","焉","以","因","于","与","也","则","者","之"};
int [][]count=new int[200][18];//用来记录个数
for(int i=0;i<200;i++) {
for (int j = 0; j < 18; j++) {
count[i][j] = 0;
}
}
int chapterNumber=0;//记录章数
for(int i=0;i<str.length();i++){//遍历文本
String s=String.valueOf(str.charAt(i));
if(s.equals("s")){//遇到s表示一章
chapterNumber++;
}
for(int j=0;j<18;j++){
if(empty[j].equals(s)){
count[chapterNumber][j]++; //匹配虚词数量加1
}
}
}
File file = new File("D:");//输出csv文件到d盘
// if (!file.exists()) {
// file.mkdirs();
// }
Appendable printWriter = null;//指定GBK,解决Microsoft不兼容
try {
printWriter = new PrintWriter(file + "/虚词统计.CSV","GBK");
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
CSVPrinter csvPrinter = null;
try {
csvPrinter = CSVFormat.EXCEL.withHeader("","而","乎","何","乃","其","且","若","所","为","焉","以","因","于","与","也","则","者","之").print(printWriter);
for(int i=1;i<=chapterNumber;i++){
csvPrinter.print("第"+i+"章");
for (int j = 0; j < 18; j++) {
csvPrinter.print(count[i][j]);
}
csvPrinter.println();
csvPrinter.flush();
}
csvPrinter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
总结
这就是利用commons-csv进行简单的csv文件输出,具体还有很多功能,可以去官网进行查看
https://commons.apache.org/proper/commons-csv/apidocs/index.html