/**
* 上海汽车集团财务有限责任公司
* Copyright (c) 1994-2014 All Rights
Reserved.
*/
package com.saicfc.pmpf.internal.manage.utils;
import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;
/**
* Excel文件生成器
* @author lizhiyong
* @version $Id: ExcelUtils.java, v 0.1
2014年9月11日 下午5:27:18 Exp $
*/
public class ExcelUtils {
/**
* 生成一个Excel文件 jxl
* @param filePath 要生成的Excel文件的路径
* @param titleList 要生成的Excel文件的头信息
* @param dataList 要生成的Excel文件的详细信息
* @param fileName 要生成的Excel文件名
* @param sheetName 要生成的sheet文件名
* @return excelFile
*/
@SuppressWarnings("rawtypes")
public static File writeExcel(String filePath, List titleList, List dataList, String fileName,
String sheetName) {
WritableWorkbook wwb = null;
File excelFile = null;
try {
File file = new File(filePath);
if (!file.exists()) {
file.mkdir();
System.out.println("文件夹已创建");
}
// 新建立一个jxl文件
//定义文件名格式并创建
excelFile = File.createTempFile(fileName, ".xls", new File(filePath));
//首先要使用Workbook类的工厂方法创建一个可写入的工作薄(Workbook)对象
wwb = Workbook.createWorkbook(excelFile);
if (wwb != null) {
//创建一个可写入的工作表
//Workbook的createSheet方法有两个参数,第一个是工作表的名称,第二个是工作表在工作薄中的位置
WritableSheet ws = wwb.createSheet(sheetName, 0);
//添加头信息
int row = 0;
for (Iterator iterator = titleList.iterator(); iterator.hasNext();) {
LinkedHashMap titleMap = (LinkedHashMap) iterator.next();
int cell = 0;
for (Iterator titleIterator = titleMap.entrySet().iterator(); titleIterator
.hasNext();) {
java.util.Map.Entry titleEntry = (java.util.Map.Entry) titleIterator.next();
//这里需要注意的是,在Excel中,第一个参数表示列,第二个表示行
ws.addCell(new jxl.write.Label(cell, row, (String) titleEntry.getValue()));
cell++;
}
row++;
}
//下面开始添加单元格信息
int rows = titleList.size();
for (Iterator iterator = dataList.iterator(); iterator.hasNext();) {
LinkedHashMap dataMap = (LinkedHashMap) iterator.next();
int cells = 0;
for (Iterator dataIterator = dataMap.entrySet().iterator(); dataIterator
.hasNext();) {
java.util.Map.Entry dataEntry = (java.util.Map.Entry) dataIterator.next();
//这里需要注意的是,在Excel中,第一个参数表示列,第二个表示行
//将生成的单元格添加到工作表中
ws.addCell(new jxl.write.Label(cells, rows, (String) dataEntry.getValue()));
cells++;
}
rows++;
}
//从内存中写入文件中
wwb.write();
//关闭资源,释放内存
wwb.close();
}
} catch (IOException e) {
e.printStackTrace();
} catch (RowsExceededException e) {
e.printStackTrace();
} catch (WriteException e) {
e.printStackTrace();
}
return excelFile;
}
}
下面是调用:
String fileName = "中信银行(CITIC)退款数据";
String sheetName = "中信银行(CITIC)退款数据";
List titleList = new ArrayList();
LinkedHashMap titleMap = new LinkedHashMap();
titleMap.put("fileType", "文件类型:");
titleMap.put("fileType1", "FTB2CBatchPayback");
titleList.add(0, titleMap);
LinkedHashMap titleMap2 = new LinkedHashMap();
titleMap2.put("fileTitle", "标题:");
titleMap2.put("fileTitle1", "退款批量");
titleList.add(1, titleMap2);
titleList.add(2, new LinkedHashMap());
titleList.add(3, new LinkedHashMap());
LinkedHashMap titleMap3 = new LinkedHashMap();
titleMap3.put("title1", "原支付订单号");
titleMap3.put("title2", "原支付订单日期");
titleMap3.put("title3", "退款金额");
titleMap3.put("title4", "摘要");
titleList.add(4, titleMap3);
//创建文件
File file = ExcelUtils.writeExcel(filePath, titleList, exportData, fileName, sheetName);
//下载文件
downLoadFile(response, filePath, file);
/**
* 下载文件
* @param response
* @param filePath 文件路径
* @param file 文件
* @throws IOException
*/
public void downLoadFile(HttpServletResponse response, String filePath, File file)
throws IOException {
String fileName = file.getName();
//下载文件
FileManageUtils.exportFile(response, filePath + fileName, fileName);
//删除单个文件
FileManageUtils.deleteFile(filePath, fileName);
}
package com.saicfc.pmpf.internal.manage.utils;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import javax.servlet.http.HttpServletResponse;
/**
* 文件管理
* @author lizhiyong
* @version $Id: FileManageUtils.java, v 0.1
2014年9月11日 上午9:37:47 Exp $
*/
public class FileManageUtils {
/**
* 下载文件
* @param response
* @param csvFilePath
* 文件路径
* @param fileName
* 文件名称
* @throws IOException
*/
public static void exportFile(HttpServletResponse response, String csvFilePath, String fileName)
throws IOException {
response.setContentType("application/csv;charset=GBK");
response.setHeader("Content-Disposition",
"attachment; filename=" + new String(fileName.getBytes("GBK"), "ISO8859-1"));
//URLEncoder.encode(fileName, "GBK")
InputStream in = null;
try {
in = new FileInputStream(csvFilePath);
int len = 0;
byte[] buffer = new byte[1024];
response.setCharacterEncoding("GBK");
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);
}
} 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().equals(fileName)) {
files[i].delete();
return;
}
}
}
}
}
}