package com.weinet.cardfolder.utils;
import java.io.File;
import java.io.FileOutputStream;
import java.lang.reflect.Field;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import com.vaadin.server.FileDownloader;
import com.vaadin.server.FileResource;
import com.vaadin.ui.Button;
/**
* 文件下载的工具包
* @author zj
*
*/
public class FileDownloadUtilBtn extends Button {
private static final long serialVersionUID = 3808505824781466043L;
private Log log = LogFactory.getLog(getClass());
public FileDownloadUtilBtn(){}
/**
* 传入list和文件名,即可实现下载。注意:list对象中不能再封装对象
* @param fileName 命名下载文件的名称
* @throws Exception
* @throws IllegalAccessException
*
*/
public FileDownloadUtilBtn(List<?> list, String fileName) throws IllegalAccessException, Exception{
createSheet(null, null);
initDownloadBtn(list, fileName);
createSheet(list, fileName);
}
public void initDownloadBtn(List<?> list, String name) {
this.setPrimaryStyleName("v-my-button");
this.setCaption("文件下载");
String fileName = FileUtil.getTempDir() + "/" + name + ".xls";
File file = new File(fileName);
FileDownloader downloader = new FileDownloader(new FileResource(file));
downloader.extend(this);
}
private void createSheet(List<?> list, String name) throws Exception, IllegalAccessException{
String fileName = FileUtil.getTempDir() + "/" + name + ".xls";
log.info("开始执行到处会员信息的任务,路径="+fileName);
Workbook wb = new HSSFWorkbook();
FileOutputStream fileOut = new FileOutputStream(fileName);
Sheet sheet = wb.createSheet();
if(list==null) return;
for (int i = 0; i < list.size(); i++) {
Field[] fields = list.get(i).getClass().getDeclaredFields();
Object oi = list.get(i);
Row row = sheet.createRow(i);
for (int j = 0; j < fields.length; j++) {
if(!fields[j].isAccessible()){
fields[j].setAccessible(true);
}
}
for(int m=0;m< fields.length; m++){
if(fields[m].get(oi)!=null){
row.createCell(m).setCellValue(String.valueOf(fields[m].get(oi)));
}
}
}
wb.write(fileOut);
fileOut.close();
}
}
Java——反射机制实例
最新推荐文章于 2022-05-08 22:31:29 发布