后台生成csv文件,完成前端下载功能
后台java代码
package com.jzt.mdsl.core.utils;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.beanutils.BeanUtils;
/**
* 文件操作
*/
public class CSVUtils {
/**
* 生成为CVS文件
* @param exportData
* 源数据List
* @param map
* csv文件的列表头map
* @param outPutPath
* 文件路径
* @param fileName
* 文件名称
* @return
* @throws IOException
*/
@SuppressWarnings("rawtypes")
public static void createCSVFile(HttpServletResponse response,List exportData, LinkedHashMap map, String outPutPath,
String fileName) throws IOException {
File csvFile = null;
BufferedWriter csvFileOutputStream = null;
try {
File file = new File(outPutPath);
if (!file.exists()) {
file.mkdir();
}
//定义文件名格式并创建
csvFile = File.createTempFile(fileName, ".csv", new File(outPutPath));
// UTF-8使正确读取分隔符","
csvFileOutputStream = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(
csvFile), "UTF-8"), 1024);
// 写入文件头部
for (Iterator propertyIterator = map.entrySet().iterator(); propertyIterator.hasNext();) {
java.util.Map.Entry propertyEntry = (java.util.Map.Entry) propertyIterator.next();
csvFileOutputStream
.write(""+ (String) propertyEntry.getValue() != null ? (String) propertyEntry.getValue() : "");
if (propertyIterator.hasNext()) {
csvFileOutputStream.write(",");
}
}
csvFileOutputStream.newLine();
// 写入文件内容
for (Iterator iterator = exportData.iterator(); iterator.hasNext();) {
Object row = (Object) iterator.next();
for (Iterator propertyIterator = map.entrySet().iterator(); propertyIterator
.hasNext();) {
java.util.Map.Entry propertyEntry = (java.util.Map.Entry) propertyIterator
.next();
if((String) BeanUtils.getProperty(row,(String) propertyEntry.getKey())!=null){
csvFileOutputStream.write((String) BeanUtils.getProperty(row,(String) propertyEntry.getKey()));
}
if (propertyIterator.hasNext()) {
csvFileOutputStream.write(",");
}
}
if (iterator.hasNext()) {
csvFileOutputStream.newLine();
}
}
csvFileOutputStream.flush();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
csvFileOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
/*
*
*/
response.setContentType("application/csv;charset=UTF-8");
response.setHeader("Content-Disposition",
"attachment; filename=" + URLEncoder.encode(fileName+".csv", "UTF-8"));
InputStream in = null;
try {
in = new FileInputStream(csvFile.getPath());
int len = 0;
byte[] buffer = new byte[1024];
response.setCharacterEncoding("UTF-8");
OutputStream out = response.getOutputStream();
while ((len = in.read(buffer)) > 0) {
out.write(new byte[] { (byte) 0xEF, (byte) 0xBB, (byte) 0xBF });
out.write(buffer, 0, len);
}
return ;
} catch (FileNotFoundException e) {
System.out.println(e);
} finally {
if (in != null) {
try {
in.close();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
}
/**
* 下载文件
* @param response
* @param csvFilePath
* 文件路径
* @param fileName
* 文件名称
* @return
* @throws IOException
*/
public static void exportFile(HttpServletResponse response, String csvFilePath, String fileName)
throws IOException {
response.setContentType("application/csv;charset=UTF-8");
response.setHeader("Content-Disposition",
"attachment; filename=" + URLEncoder.encode(fileName+".csv", "UTF-8"));
File file = new File(csvFilePath);
//判断文件是否存在
if (file.exists()) {
File[] files = file.listFiles();
for (int i = 0; i < files.length; i++) {
if (files[i].isFile()) {
if (files[i].getName().indexOf(fileName)!=-1) {
InputStream in = null;
try {
in = new FileInputStream(files[i].getPath());
int len = 0;
byte[] buffer = new byte[1024];
response.setCharacterEncoding("UTF-8");
OutputStream out = response.getOutputStream();
while ((len = in.read(buffer)) > 0) {
out.write(new byte[] { (byte) 0xEF, (byte) 0xBB, (byte) 0xBF });
out.write(buffer, 0, len);
}
return ;
} catch (FileNotFoundException e) {
System.out.println(e);
} finally {
if (in != null) {
try {
in.close();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
}
}
}
}
}
/**
* 删除该目录filePath下的所有文件
* @param filePath
* 文件目录路径
*/
public static void deleteFiles(String filePath) {
File file = new File(filePath);
if (file.exists()) {
File[] files = file.listFiles();
for (int i = 0; i < files.length; i++) {
if (files[i].isFile()) {
files[i].delete();
}
}
}
}
/**
* 删除单个文件
* @param filePath
* 文件目录路径
* @param fileName
* 文件名称
*/
public static void deleteFile(String filePath, String fileName) {
File file = new File(filePath);
//判断文件是否存在
if (file.exists()) {
File[] files = file.listFiles();
for (int i = 0; i < files.length; i++) {
if (files[i].isFile()) {
if (files[i].getName().indexOf(fileName)!=-1) {
files[i].delete();
return;
}
}
}
}
}
}
前端代码:
exportOrders : function() {
var createTimeStart=$("input[name='createTimeStart']").val();
var createTimeEnd=$("input[name='createTimeEnd']").val();
var ordCd=$("input[name='ordCd']").val();
var thirdpartCd=$("input[name='thirdpartCd']").val();
var finshTimeStart=$("input[name='finshTimeStart']").val();
var finshTimeEnd=$("input[name='finshTimeEnd']").val();
var courierName=$("input[name='courierName']").val();
var promCd=$("input[name='promCd']").val();
var orderTypes=$("select[name='orderTypes'] option:selected").text();
var pharmProv=$("select[name='pharmProv'] option:selected").text();
var pharmCity=$("select[name='pharmCity'] option:selected").text();
var pharmCounty=$("select[name='pharmCounty'] option:selected").text();
var pharmacy=$("input[name='pharmacy']").val();
var currStatus=$("select[name='currStatus'] option:selected").text();
pharmProv =window.encodeURI(window.encodeURI(pharmProv));
pharmCity =window.encodeURI(window.encodeURI(pharmCity));
pharmCounty =window.encodeURI(window.encodeURI(pharmCounty));
// alert(createTimeStart);
// alert(createTimeEnd);
// alert(ordCd);
// alert(thirdpartCd);
// alert(finshTimeStart);
// alert(finshTimeEnd);
// alert(courierName);
// alert(promCd);
// alert(orderTypes);
// alert(pharmProv);
// alert(pharmCity);
// alert(pharmCounty);
// alert(pharmacy);
// alert(currStatus);
var url="/logistic/modules/order/csvGenerate?createTimeStart="+createTimeStart+"&createTimeEnd="+createTimeEnd+
"&ordCd="+ordCd+"&thirdpartCd="+thirdpartCd+"&finshTimeStart="+finshTimeStart+"&finshTimeEnd="+finshTimeEnd+"&courierName="+courierName+"&promCd="+promCd+
"&orderTypes="+orderTypes+"&pharmProv="+pharmProv+"&pharmCity="+pharmCity+"&pharmCounty="+pharmCounty+"&pharmacy="+pharmacy+"&asdcurrStatus="+currStatus;
//location.href=url;
$("#csvDown").attr("href",url);
$("#csvdowns").click();
// $.ajax({
// type:"GET",
// url:"/logistic/modules/order/csvGenerate?createTimeStart="+createTimeStart+"&createTimeEnd="+createTimeEnd+
// "&ordCd="+ordCd+"&thirdpartCd="+thirdpartCd+"&finshTimeStart="+finshTimeStart+"&finshTimeEnd="+finshTimeEnd+"&courierName="+courierName+"&promCd="+promCd+
// "&orderTypes="+orderTypes+"&pharmProv="+pharmProv+"&pharmCity="+pharmCity+"&pharmCounty="+pharmCounty+"&pharmacy="+pharmacy+"&asdcurrStatus="+currStatus,
// dataType:"json",
// contentType:"application/json",
// success:function(msg){
// $("#csvdown").click();
// $.ajax({
// type:"GET",
// url:"/logistic/modules/order/csvDelete",
// dataType:"json",
// contentType:"application/json",
// success:function(msg){
//
// }
// });
// }
// });
},
注意统一编码格式,改方法唯一缺陷为,下载 文件后,使用wps打开会有部分中文乱码,是有office则没问题
写的有点乱,仅供学习参考,谢谢
分享到:
相关推荐
纯JavaScript实现生成并下载CSV文件,前端竟然可以生成CSV文件,感兴趣的可以看下如何生成CSV文件,并且下载。
js生成csv文件下载
java动态实现生成CSV文件,java动态实现生成CSV文件,java动态实现生成CSV文件,java动态实现生成CSV文件,java动态实现生成CSV文件,java动态实现生成CSV文件,java动态实现生成CSV文件
4.后台服务java语言实现,前端不限制; 5.前端代码: [removed]void(0)" class="layui-btn"> <i class="fa fa-refresh"> 导出Excel function listHbaseExcel(url){ var tableName=$("#tableName").val();...
一个简单的java生成CSV文件
在PHP中生成CSV文件是一项常见的任务,特别是在数据导出、报表生成或数据分析的场景下。CSV(Comma Separated Values)格式是一种通用的数据交换格式,因其简单性和易读性而广受欢迎。以下将详细介绍如何使用PHP来...
在Java开发中,有时我们需要将后端数据导出为CSV(Comma Separated Values)文件,以便用户可以方便地下载和处理数据。CSV文件是一种通用的、轻量级的数据交换格式,适合存储表格数据。本篇文章将深入探讨如何使用...
3. CSV文件的生成,通过FatFS库实现文件创建和数据写入。 4. 以太网驱动和TCP服务器的搭建,使用 lwIP 堆栈处理网络通信。 5. TCP数据接收和处理,确保数据正确写入CSV文件。 以上是STM32实现SD卡fatfs文件系统,写...
filename=filename.csv”,让浏览器下载这个CSV文件。 6. 测试环境准备:描述中提到“测试需要手动修改TP数据库配置”,意味着在测试环境中,可能需要创建一个新的数据库或修改现有数据库的连接参数,以便与CSV...
在给定的场景中,我们需要实现一个功能,即通过Java编程语言生成压缩文件,并将其上传到FTP文件管理服务器,同时涉及到CSV(Comma Separated Values)文件的处理。以下是对各个文件及其所涉及知识点的详细解释: 1....
STM32是一款基于ARM Cortex-M内核的微控制器,广泛应用于嵌入式系统设计,而SD卡则是一种常用的存储介质,常用于...通过这个项目,开发者可以学习到如何在嵌入式系统中实现文件系统,增强设备的数据存储和处理能力。
在标题“XlS批量生成CSV 多个CSV合并为1个CSV”中,涉及到的主要知识点是Excel文件(XLS)的批处理转换以及多个CSV文件的合并。这些操作在数据分析、报表整理、数据库导入等场景中非常实用。 首先,我们需要理解XLS...
分步生成csv,获取数据第一行生成文件标题,同时生成第一行数据,返回标题名称。 将多csv文件压缩成zip,之后删除原csv文件
- csv包,后台实现csv文件生成和写操作。 - reportlab包, 后台实现PDF文件生成和写操作。 - Flask的send_file包, 实现从后端向发送请求的客户端传送文件。 提供了完整的文档来帮助用户配置开发环境。 提供了所需...
在我们需求中需要读取一个csv文件的数据,但是只有旧的csv的几列数据再新写入一个csv文件,而且在旧的数据有空的数据,需要判断旧的csv的空值。可能写的存在不完善!但是应用的需求里面还是能用的
本篇文章将深入探讨如何使用univocity-parsers库来创建CSV文件,以及如何利用JSCH库将生成的CSV文件上传到SFTP(Secure File Transfer Protocol)服务器。 首先,让我们了解univocity-parsers库。这是一个强大的...
通过以上步骤,你已经实现了在Java中导出CSV文件,然后将其压缩成ZIP格式,并提供了一个Web接口供用户下载。确保正确配置你的服务器和文件路径,以适应实际项目的需求。同时,不要忘记处理可能出现的异常,以确保...
本项目涉及的关键知识点包括FTP客户端的实现、CSV文件的解析、多文件下载与并发处理以及日志记录。以下是对这些核心内容的详细阐述: 1. FTP客户端实现: FTP客户端通常由两部分组成:连接管理(登录、断开连接)...
Java 使用 JDBC 将数据库数据导出到 CSV 文件 Java 是一种广泛使用的编程语言,它提供了多种方式来处理数据库数据,而 JDBC(Java Database Connectivity)是 Java 中连接数据库的标准 API 之一。将数据库数据导出...
文件为c程序文件,实现功能:C语言输出csv文件,测量数据形成表格