此方法不用引入其他依赖,jdk自身的就够了,目前我使用此方法
controller 层
@GetMapping("/csv")
public void csv(HttpServletRequest request, HttpServletResponse response, String keyword) throws Exception{
//查询数据库获取导出数据
List<Student> list = xxxService.exportList(keyword);
String fileName = ExportUtil.getFileName(request, "测试数据" + System.currentTimeMillis() + ".csv");
response.setContentType(MediaType.APPLICATION_OCTET_STREAM.toString());
response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\";");
// 表头
LinkedHashMap<String, Object> header = new LinkedHashMap<>();
header.put("1", "姓名");
header.put("2", "年龄");
header.put("3", "性别");
header.put("4", "地址");
List<LinkedHashMap<String, Object>> data = new ArrayList<>();
data.add(header);
list.forEach(x->{
LinkedHashMap<String, Object> body = new LinkedHashMap<>();
body.put("1", x.getName());
body.put("2", x.getAge());
body.put("3", x.getSex());
body.put("4", x.getAddress());
data.add(body);
FileCopyUtils.copy(ExportUtil.exportCSV(data), response.getOutputStream());
ExportUtil 工具类
import javax.servlet.http.HttpServletRequest;
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
* @author yyb
* @time 2020/3/9
public class ExportUtil {
public static byte[] exportCSV(List<LinkedHashMap<String, Object>> exportData) {
ByteArrayOutputStream out = new ByteArrayOutputStream();
BufferedWriter buffCvsWriter = null;
try {
buffCvsWriter = new BufferedWriter(new OutputStreamWriter(out, StandardCharsets.UTF_8));
// 将body数据写入表格
for (Iterator<LinkedHashMap<String, Object>> iterator = exportData.iterator(); iterator.hasNext(); ) {
fillDataToCsv(buffCvsWriter, iterator.next());
if (iterator.hasNext()) {
buffCvsWriter.newLine();
// 刷新缓冲
buffCvsWriter.flush();
} catch (IOException e) {
e.printStackTrace();
} finally {
// 释放资源
if (buffCvsWriter != null) {
try {
buffCvsWriter.close();
} catch (IOException e) {
e.printStackTrace();
return out.toByteArray();
private static void fillDataToCsv(BufferedWriter buffCvsWriter, LinkedHashMap row) throws IOException {
Map.Entry propertyEntry;
for (Iterator<Map.Entry> propertyIterator = row.entrySet().iterator(); propertyIterator.hasNext(); ) {
propertyEntry = propertyIterator.next();
buffCvsWriter.write("\"" + propertyEntry.getValue().toString() + "\"");
if (propertyIterator.hasNext()) {
buffCvsWriter.write(",");
public static String getFileName(HttpServletRequest request, String name) throws UnsupportedEncodingException {
String userAgent = request.getHeader("USER-AGENT");
return userAgent.contains("Mozilla") ? new String(name.getBytes(), "ISO8859-1") : name;
好了,打完收工。
CSV是一种通用的、相对简单的文件格式,其文件以纯文本形式存储表格数据(数字和文本)。可以通过下面的代码进行测试,可以发现能正常的进行读取和输出csv格式的文件。由于CSV是一种纯文本的文件,因此其具有以下几个特点。CSV是纯文本文件,可以使用任何文本编辑器进行编辑。java中读取和存储数据到CSV格式的文件中。支持追加模式写入,节省内存。CSV的文件行数没有限制。...
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import java.io.*;
1.读取文件import java.io.BufferedReader;
import java.io.FileReader; public class TestRead { public static void main(String[] args) {
try {
BufferedReader reader = new Buffer
在本教程中,我们将学习如何读取 CSV 文件并将其内容复制到数组或列表中。在本教程中,我们将使用仅包含三条记录的简单 CSV 文件。但是在读取更复杂的 CSV 文件时,我们可能无法获得预期的结果。请注意,我们不能使用此方法读取更复杂的 CSV 文件或逗号本身为值的文件。如果我们尝试读取此文件,则以下数据存储在列表中。我们将简单地读取文件的每一行,然后使用逗号作为分隔符将其拆分。让我们将上面的代码用于CSV文件,其中我们有一个值为逗号的单元格。是一个CSV文件解析库,可以使从CSV文件读取变得更加容易。
实际工作中,很多数据都存在csv文件中,使用 java语言开发的时候,有的时候需要读取文件,或者将csv文件导入到数据库中,commons-csv作为三方类库,简化了读取操作!
最近在做嵌入式Linux平台上的服务器,使用的工具是Java。在项目中一方面要将所有数据记录在日志文件中,存储于嵌入式Linux平台上;另一方面要将实时数据存放在一个表格里,随时供网络查询。日志文件我们曾经选用过txt文件,这个最简单;excel文件,使用jxl;使用过sqlLite嵌入式数据库,使用第三方的java库。调试通过,运行的还算不错。不过遇到了一个java虚拟机内存不足的问题,我们将虚...
public static ArrayList<String> readCsvByCsvReader(String filePath) {
ArrayList<String> strList = n