请用java写一个示例代码
时间: 2023-12-20 16:07:51 浏览: 27
好的,以下是一个使用 Java 实现动态导出表头的示例代码,其中使用了 opencsv 库来进行 CSV 格式的转换:
```java
import com.opencsv.CSVWriter;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
public class ExportCsvUtil {
public static void exportCsv(HttpServletResponse response, List<String> headers, List<List<Object>> rows, String fileName) throws IOException {
// 创建 CSVWriter 对象,并设置相关配置
ByteArrayOutputStream out = new ByteArrayOutputStream();
CSVWriter csvWriter = new CSVWriter(new OutputStreamWriter(out, "UTF-8"), ',', '"', '"', "\n");
// 添加表头
csvWriter.writeNext(headers.toArray(new String[headers.size()]));
// 添加表格数据
for (List<Object> row : rows) {
List<String> csvRow = new ArrayList<>();
for (Object item : row) {
if (item == null) {
csvRow.add("");
} else {
csvRow.add(item.toString());
}
}
csvWriter.writeNext(csvRow.toArray(new String[csvRow.size()]));
}
// 关闭 CSVWriter 对象
csvWriter.flush();
csvWriter.close();
// 设置响应头,告知浏览器文件类型为 CSV,并设置文件名
response.setContentType("text/csv");
response.setHeader("Content-Disposition", "attachment; filename=" + fileName);
// 将 CSV 格式的数据转换成 byte 数组,并输出到响应流中
response.getOutputStream().write(out.toByteArray());
response.flushBuffer();
}
}
```
使用时,可以传入要导出的表头数据和表格数据,以及要导出的文件名,调用该方法即可实现导出:
```java
List<String> headers = Arrays.asList("姓名", "年龄", "性别");
List<List<Object>> rows = new ArrayList<>();
rows.add(Arrays.asList("张三", 20, "男"));
rows.add(Arrays.asList("李四", 25, "女"));
rows.add(Arrays.asList("王五", 30, "男"));
ExportCsvUtil.exportCsv(response, headers, rows, "example.csv");
```