Java中的输出文件

先说一下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);
	}

导出表格样式为:
在这里插入图片描述

发布了15 篇原创文章 · 获赞 15 · 访问量 556

猜你喜欢

转载自blog.csdn.net/qq_44191359/article/details/102798494