先说一下Java中的FileInputStream与FileOutputStream的基本使用:
1.InputStream和OutputStream是抽象类,是所有输入流和输出流的父类
InputStream(输入流)---->用来读入数据的
OutputStream(输出流)---->用来写出数据的
文件输入流:FileInputStream
文件输出流:FileOutputStream
1.普通文件导出
String sql = "需要输出的内容";
//输出文件1029
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd_HHmmss");
Date now = new Date();
String pathFile= "F:/"+sdf.format(now);
File file = new File(pathFile);
try {
FileOutputStream fop = new FileOutputStream(file);
if(!file.exists()){
file.createNewFile();
}
byte[] contentInBytes = sql.getBytes();
System.out.println("contentInBytes===="+contentInBytes);
fop.write(contentInBytes);
//先清空缓冲区数据,保证缓存清空输出
fop.flush();
//关闭此文件输出流并释放与此流有关的所有系统资源
fop.close();
} catch (Exception e) {
e.printStackTrace();
}
2.导出表格超列的解决办法:
- 前台代码:
/**
*前台创建DataGrid表格
*/
function _initDataGridMain(){
var gridEntityContainer = new mx.datacontainers.GridEntityContainer({
baseUrl:ClearElecPriceForRealtime.mappath(""),
iscID:"-1",
loadMeta:false,
primaryKey:"areaid",
type:"local"
});
DataGridMain = new mx.datacontrols.DataGrid({
id:"DataGridMain",
width:"100%",
entityContainer: gridEntityContainer,
onload:me.controller.onloadedAction,
allowSorting :true
});
HSplitDataGridArea1.addControl(DataGridMain);
}
/**
* 初始化DataGrid的columns
*/
function initDataGridColumn(){
var dataGrid=me.view.getDataGridMain();
var columns=[];
columns.push({id:"areaid",textMember:"text",name:"areaid",caption:"区域id",textMode:"normal"});
columns.push({id:"areaname",textMember:"text",name:"areaname",caption:"地区名称",align:'center',dataAlign:'left',textMode:"normal",statisticAlign:"center"});
var columnName="price";
var times=me.times;
for(var i=0;i<times.length;i++){
columns.push({id:columnName+(i*1+1),textMember:"text",name:columnName+(i*1+1),align:'center',dataAlign:'right',caption:times[i],textMode:"normal",width:"80px",statisticAlign:"center"});
}
dataGrid.setColumns(columns);
}
/**
* 导出datagrid数据到excel
*/
me.exporeResult = function () {
var exportExcelName = "导出文件名称";
var dataGridInfo = me.view.getDataGridMain();
if (dataGridInfo.items.length <= 0) {
mx.indicate('info', '无数据可导出');
return;
}
//表格数据
var gridColumns =dataGridInfo._columns;
var gridData =dataGridInfo.entityContainer.data;
var params = {
"gridColumns" : gridColumns,
"gridData" : gridData,
"exportExcelName" : exportExcelName
};
var baseurl =ClearElecPriceForRealtime.mappath(mx.rootPath+'/ESM_IIS/rest/ExcelExport/sendText');
var client = new mx.rpc.RESTClient();
client.post(baseurl, JSON.stringify(params), function(result) {
if(result.successful){
if(result.resultValue==1){
window.location.href = ClearElecPriceForRealtime.mappath("~/rest/ExcelExport/exportExcel/"+exportExcelName);
mx.indicate("info", "导出成功!");
}else{
mx.indicate("info", "导出失败");
}
}else{
mx.indicate("info", "导出失败");
}
});
}
前台传给后台参数格式为:
- 后台代码:
//poi导出excel
@RequestMapping(value="/sendText", method = RequestMethod.POST)
public @ResponseBody WrappedResult sendText(@RequestBody Map<String, Object> params ) {
List<Map<String, Object>> gridColumns = (List<Map<String, Object>>)params.get("gridColumns");
List<Map<String, Object>> gridData = (List<Map<String, Object>>) params.get("gridData");
String exportExcelName = params.get("exportExcelName").toString();
String filename = exportExcelName+".xls";
String path = System.getenv("OSP_HOME");
int resultCode = writeExcel(gridColumns,gridData, path + "/excel", filename);
return WrappedResult.successWrapedResult(resultCode);
}
//数据导出
private int writeExcel(List<Map<String, Object>> gridColumns,List<Map<String, Object>> gridData, String path,String name) {
File file = new File(path);
int code = 1;
if (!file.exists()) {
file.mkdir();
}
FileOutputStream fileOut = null;
try {
XSSFWorkbook wb = new XSSFWorkbook(); // 创建工作簿对象
XSSFSheet sheet1 = wb.createSheet("sheet1"); // 创建工作表
XSSFCellStyle cellStyle1 = wb.createCellStyle(); //设置样式;
cellStyle1.setAlignment(HSSFCellStyle.ALIGN_CENTER);//设置左右居中
for (int i = 0; i < gridData.size() + 1; i++) {// 行
XSSFRow row = sheet1.createRow(i);//创建行元素对象,i表示行数,0为第一行
for (int k = 0; k < gridColumns.size(); k++) {// 列
XSSFCell cell1 = row.createCell(k); //创建单元格对象,为每一个单元格
if (i == 0) {
cell1.setCellValue(gridColumns.get(k).get("caption").toString());//设置当前单元格显示内容
} else {
String gridColumnsName = gridColumns.get(k).get("name").toString();
if(gridData.get(i - 1).get(gridColumnsName) == null){
cell1.setCellValue("");
}else{
cell1.setCellValue(gridData.get(i - 1).get(gridColumnsName).toString());
}
}
}
}
//输出Excel文件
fileOut = new FileOutputStream(path + "/" + name);
wb.write(fileOut);
} catch (Exception e) {
code = 0;
e.printStackTrace();
}
return code;
}
/**
* poi导出excel
*/
@RequestMapping(value="/exportExcel/{exportExcelName}",method=RequestMethod.GET)
public @ResponseBody ResponseEntity<byte[]> exportExcel(@PathVariable(value="exportExcelName") String exportExcelName) throws Exception {原来报错:action的参数标注默认是debug级别,解决方法:写全@PathVariable的参数, 获取批量设置界面的档位信息
ResponseEntity<byte[]> resultValue = exportExcell(exportExcelName);
return resultValue;
}
public ResponseEntity<byte[]> exportExcell(String exportExcelName)throws Exception {
String filename = exportExcelName + ".xls";
String path = System.getenv("OSP_HOME");
File file = new File(path + "/excel/" + filename);
HttpHeaders headers = new HttpHeaders();
// 下载显示的文件名,解决中文名称乱码问题
String downloadFielName = new String(filename.getBytes("UTF-8"),"iso-8859-1");
// 通知浏览器以attachment(下载方式)打开图片
headers.setContentDispositionFormData("attachment", downloadFielName);
// application/octet-stream : 二进制流数据(最常见的文件下载)。
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
return new ResponseEntity<byte[]>(FileUtils.readFileToByteArray(file),headers, HttpStatus.CREATED);
}
导出表格样式为: