package com.hu.excel.exportExcel;
import java.io.InputStream;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Properties;
// 反射学习
public class ReflexStudy {
public void test(Student student) throws Exception{
// 获得Class的3种方法
Class stu = student.getClass();
Class stu2 = Student.class;
Class stu3 = Class.forName("com.hu.excel.exportExcel.Student");
// getFields() 获得public修饰的所有成员变量
// getField(String) 获得public修饰的指定的成员变量
// getDeclaredFields() 获得所有成员变量,不管修饰符。
// getDeclaredField(String) 获得指定成员变量,不管修饰符。
Field[] fields1 = stu.getFields();
Field field1 = stu.getField("id");
Field[] declaredFields2 = stu.getDeclaredFields();
Field declaredField2 = stu.getDeclaredField("id");
for (Field field : declaredFields2) {
// 忽略访问权限修饰符的安全检查,使可以操作非公有成员变量。 暴力反射
field.setAccessible(true);
// 设置成员变量的值
field.set(student,2);
// 获得成员变量的值
Object object = field.get(student);
System.out.println(field);
System.out.println(object);
}
// 获得构造方法
Constructor constructor = stu.getConstructor();
// 实例一个对象
Object object = constructor.newInstance();
System.out.println(constructor);
// getMethods()获得所有成员方法
// getMethod(String name, Class<?>... parameterTypes)获得指定成员方法
// getDeclaredMethods() 获得所有成员方法。
// getDeclaredMethod(String name, Class<?>... parameterTypes) 获得指定成员方法。
Method[] methods = stu.getMethods();
Method method = stu.getMethod("getId");
Method[] declaredMethods = stu.getDeclaredMethods();
Method declaredMethod = stu.getDeclaredMethod("getAge");
// 忽略访问权限修饰符的安全检查,使可以操作非公有成员方法。 暴力反射
declaredMethod.setAccessible(true);
// 执行方法
Object string = declaredMethod.invoke(student);
System.out.println("method"+string);
}
// 通过加载配置文件获得信息
public void test2() throws Exception{
// 1、加载配置文件
// 1、1创建Properties对象
Properties properties = new Properties();
// 1、2加载配置文件
// 1、2、1获得class目录下的配置文件
ClassLoader classLoader = ReflexStudy.class.getClassLoader();
InputStream is = classLoader.getResourceAsStream("com/hu/excel/pro.properties");
if(null!=is) {
properties.load(is);
// 2、获得配置文件中定义的数据
String className = properties.getProperty("className");
String methodName = properties.getProperty("classMethod");
// 3、加载该类进内存
Class cls = Class.forName(className);
// 4、创建对象
Object object = cls.newInstance();
// 5、获得方法对象
Method method = cls.getMethod(methodName);
// 6、执行方法
Object s = method.invoke(object);
System.out.println("通过加载配置文件获得信息" + s);
}
}
}
package com.hu.excel.exportExcel;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.lang.NonNull;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.lang.reflect.Field;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.*;
/**
* 导入导出Excel工具类
* @param <T>
*/
public class ExcelUtil<T> {
static Logger logger = LoggerFactory.getLogger(ExcelUtil.class);
private final static String excel2003L =".xls"; //2003- 版本的excel
private final static String excel2007U =".xlsx"; //2007+ 版本的excel
/**
* 将数据导出到Excel中,并输出Excel
* @param params 传入一个Map,键值对包含objects(数据)、headers(表头)类的字段(key)与表头(value)字段一一对应、
* sheetName(sheet名称)、filePath(Excel存放地址)
* @return 提示成功导出。
* @throws Exception IO异常
*/
public String exportExcel(@NonNull Map<String, Object> params) throws Exception{
List<T> objects = (List<T>)params.get("objects");
logger.info("objects: "+objects);
Map<String, String> headers = (Map<String, String>) params.get("headers"); // 类的字段与表头字段一一对应
logger.info("headers: "+headers);
String sheetName = (String)params.get("sheetName");
logger.info("sheetName: "+sheetName);
String filePath = (String)params.get("filePath");
logger.info("filePath: "+filePath);
Workbook workbook = new XSSFWorkbook(); //创建表格
Sheet sheet = workbook.createSheet(sheetName); //创建sheet
Set keySet = headers.keySet();
Iterator iterator = keySet.iterator();
List<String> headersParams =new ArrayList<String>();
List<String> headersName =new ArrayList<String>();
while (iterator.hasNext()) {
String key = (String) iterator.next();
headersParams.add(key);
headersName.add(headers.get(key));
}
Row row = sheet.createRow(0); //创建行,行的下标从0开始
for(int i=0; i<headers.size(); i++){
Cell cell = row.createCell(i); //创建单元格,下标从0开始
cell.setCellValue(headersName.get(i));
}
for(int i=1; i<=objects.size(); i++){
Row row1 = sheet.createRow(i);
Class object = objects.get(i-1).getClass();
for(int y=0; y<headers.size(); y++) {
Field field = object.getDeclaredField(headersParams.get(y));
String value = field.get(objects.get(i-1)).toString();
Cell cell = row1.createCell(y);
cell.setCellValue(value);
}
}
FileOutputStream fileOutputStream = new FileOutputStream(filePath); //"H:\\student\\test.xlsx"); //输出流,设置表格存储地址
workbook.write(fileOutputStream); //将表格输出
fileOutputStream.close(); //关闭输出流
logger.info("exportExcel is success!!!!!!!!!!!!!!");
return "success";
}
/**
* 将数据导入到程序中。
* @param filePath 文件路径 ("H:\\student\\test.xlsx")
* @param headerMap 类字段与表头对应(key为表头,value为字段)
* @param param 类对象
* @return 得到的类List
* @throws Exception
*/
public List<T> ImportExcel(String filePath, Map<String, String> headerMap, T param) throws Exception{
logger.info("filePath: "+filePath + "headerMap: "+headerMap + " param: "+ param.getClass());
//FileInputStream inputStream = new FileInputStream("H:\\student\\test.xlsx");
Workbook workbook = this.getText(filePath);
Sheet sheet1 = null;
Class tclass = param.getClass();
List<T> list = new ArrayList<T>();
for(int n = 0; n< workbook.getNumberOfSheets(); n++) {
sheet1 = workbook.getSheetAt(n);
if (sheet1 == null) {
continue;
}
break;
}
Row row1 = sheet1.getRow(0);
Short cellNum = row1.getLastCellNum();
Object[] headers = new Object[cellNum];
String[] headerMap1 = new String[cellNum];
for (short y = 0; y < cellNum; y++) {
Cell cell = row1.getCell(y);
Object object = this.getCellValue(cell);
headers[y] = object;
}
for(short y = 0; y < cellNum; y++){
headerMap1[y] = headerMap.get(headers[y]);
}
for(int n = 0; n< workbook.getNumberOfSheets(); n++) {
Sheet sheet = workbook.getSheetAt(n);
if (sheet == null) {
continue;
}
int lastRowNum = sheet.getLastRowNum();
for (int i = 1; i <= lastRowNum; i++) {
T t = (T) tclass.newInstance();
Row row = sheet.getRow(i);
if(null==row){
continue;
}
short lastCellNum = row.getLastCellNum();
for (short y = 0; y < lastCellNum; y++) {
Cell cell = row.getCell(y);
if(null==cell){
continue;
}
Object cellValue = this.getCellValue(cell);
if(null!=headerMap1[y]) {
Field field = tclass.getDeclaredField(headerMap1[y]);
field.setAccessible(true);
Class fieldType = field.getType() ;
String fieldTypeName = fieldType.getName();
if("java.lang.String".equals(fieldTypeName)){
field.set(t, (String)cellValue);
logger.info("cellValue"+i+": "+cellValue);
}else if("int".equals(fieldTypeName)){
int f = Integer.parseInt(cellValue.toString());
field.set(t, f);
logger.info("cellValue"+i+": "+cellValue);
}
}
}
list.add(t);
}
}
return list;
}
/**
* 判断导入的Excel的类型,并创建work
* @param filePath 文件路径
* @return work
* @throws Exception
*/
public Workbook getText(String filePath)throws Exception{
Workbook workbook = null;
FileInputStream inputStream = new FileInputStream(filePath);
String fileExit = filePath.substring(filePath.lastIndexOf(".") + 1);
if("xlsx".equals(fileExit)){
workbook = new XSSFWorkbook(inputStream);
}else if("xls".equals(workbook)){
workbook = new HSSFWorkbook(inputStream);
}else{
throw new Exception("文件类型不正确!!!!!!!!!!!!!");
}
logger.info("workbook: "+workbook);
return workbook;
}
/**
* 描述:对表格中数值进行格式化
* @param cell
* @return
*/
public static Object getCellValue(Cell cell){
Object value = null;
DecimalFormat df = new DecimalFormat("0"); //格式化number String字符
SimpleDateFormat sdf = new SimpleDateFormat("yyy-MM-dd hh:mm:ss"); //日期格式化
DecimalFormat df2 = new DecimalFormat("0.00"); //格式化数字
switch (cell.getCellType()) {
case STRING:
value = cell.getRichStringCellValue().getString();
break;
case NUMERIC:
value = cell.getNumericCellValue();
// if("General".equals(cell.getCellStyle().getDataFormatString())){
// value = df.format(cell.getNumericCellValue();
// }else if("m/d/yy".equals(cell.getCellStyle().getDataFormatString())){
// value = sdf.format(cell.getDateCellValue());
// }else{
// value = df2.format(cell.getNumericCellValue());
// }
break;
case BOOLEAN:
value = cell.getBooleanCellValue();
break;
case BLANK:
value = "";
break;
default:
break;
}
return value;
}
/**
* 导出学习
* @throws Exception
*/
public void ExportWordsExcel() throws Exception{
Workbook workbook = new XSSFWorkbook(); //创建表格
Sheet sheet = workbook.createSheet("示例1"); //创建sheet
Row row = sheet.createRow(0); //创建行,行的下标从0开始
Cell cell = row.createCell(0); //创建单元格,下标从0开始
cell.setCellValue("胡展伟"); //向单元格添加数据
FileOutputStream fileOutputStream = new FileOutputStream("H:\\student\\test.xlsx"); //输出流,设置表格存储地址
workbook.write(fileOutputStream); //将表格输出
fileOutputStream.close(); //关闭输出流
}
/**
* 导出图片学习
* @throws Exception
*/
public void ExportPictureExcel() throws Exception{
Workbook workbook = new XSSFWorkbook(); //创建表格
Sheet sheet = workbook.createSheet("示例2"); //创建sheet
FileInputStream fiStream = new FileInputStream("C:\\Users\\胡展伟\\Pictures\\baoyang.jpg");
int pictureIndex = ((XSSFWorkbook)workbook).addPicture(fiStream, Workbook.PICTURE_TYPE_JPEG);
CreationHelper creationHelper = workbook.getCreationHelper();
Drawing<?> drawingPatriarch = sheet.createDrawingPatriarch();
ClientAnchor clientAnchor = creationHelper.createClientAnchor();
clientAnchor.setRow1(0);
clientAnchor.setCol1(0);
Picture picture = drawingPatriarch.createPicture(clientAnchor, pictureIndex);
picture.resize();
FileOutputStream fileOutputStream = new FileOutputStream("H:\\student\\test.xlsx"); //输出流,设置表格存储地址
workbook.write(fileOutputStream); //将表格输出
fileOutputStream.close(); //关闭输出流
}
/**
* 导入学习
* @throws Exception
*/
public void ImportWordsExcel() throws Exception{
FileInputStream inputStream = new FileInputStream("H:\\student\\test.xlsx");
Workbook workbook = new XSSFWorkbook(inputStream);
for(int n = 0; n< workbook.getNumberOfSheets(); n++) {
Sheet sheet = workbook.getSheetAt(n);
int lastRowNum = sheet.getLastRowNum();
for (int i = 0; i <= lastRowNum; i++) {
Row row = sheet.getRow(i);
short lastCellNum = row.getLastCellNum();
StringBuilder sb = new StringBuilder();
for (int y = 0; y < lastCellNum; y++) {
Cell cell = row.getCell(y);
Object object = this.getCellValue(cell);
sb.append(object + " ");
}
System.out.println(sb);
}
}
}
}
浏览器下载 文件 @Override public ResponseEntity<Object> downloadEnclosure(long id) throws FileNotFoundException, UnsupportedEncodingException{ FileConfig fileConfig = attachmentMapper.getFilePath(id); return this.downloadFile(fileConfig.getPath()); } /** * 文件下载 * @param path 文件保存路径 * @return ResponseEntity * @throws FileNotFoundException 异常 * @throws UnsupportedEncodingException 异常 */ public ResponseEntity<Object> downloadFile(String path) throws FileNotFoundException, UnsupportedEncodingException { File file = new File(path); InputStreamResource resource = new InputStreamResource(new FileInputStream((file))); HttpHeaders headers = new HttpHeaders(); String downloadFielName = new String(file.getName().getBytes("UTF-8"),"iso-8859-1"); headers.add("Content-Disposition", "attachment;filename=" + downloadFielName); headers.add("Cache-Control","no-cache,no-store,must-revalidate"); headers.add("Pragma","no-cache"); headers.add("Expires","0"); ResponseEntity<Object> responseEntity = ResponseEntity.ok() .headers(headers) .contentLength(file.length()) .contentType(MediaType.parseMediaType("application/text")) .body(resource); return responseEntity; }