言尽于此,完结
无论是一个初级的 coder,高级的程序员,还是顶级的系统架构师,应该都有深刻的领会到设计模式的重要性。
- 第一,设计模式能让专业人之间交流方便,如下:
程序员A:这里我用了XXX设计模式
程序员B:那我大致了解你程序的设计思路了
- 第二,易维护
项目经理:今天客户有这样一个需求…
程序员:明白了,这里我使用了XXX设计模式,所以改起来很快
- 第三,设计模式是编程经验的总结
程序员A:B,你怎么想到要这样去构建你的代码
程序员B:在我学习了XXX设计模式之后,好像自然而然就感觉这样写能避免一些问题
- 第四,学习设计模式并不是必须的
程序员A:B,你这段代码使用的是XXX设计模式对吗?
程序员B:不好意思,我没有学习过设计模式,但是我的经验告诉我是这样写的
从设计思想解读开源框架,一步一步到Spring、Spring5、SpringMVC、MyBatis等源码解读,我都已收集整理全套,篇幅有限,这块只是详细的解说了23种设计模式,整理的文件如下图一览无余!
搜集费时费力,能看到此处的都是真爱!
2.3 行 Row
同理,Row是 HSSFRow 和 XSSFRow 的接口,通过Sheet获取:
sheet.createRow(int rownum);
2.4 单元格 Cell
同理,Cell是 HSSFCell 和 XSSFCell 的接口,通过Row获取:
row.createCell(int column);row.createCell(int column, int type);
3、创建和读取
其实如果能理解面向对象,就很简单了,另外包括字体,公式,超链接等,都有对应的封装类,此处只提出了核心的几个,需要了解更多的需要自行展开。
例子的话,直接从别人教程里摘出来吧,另,读取的workbook,可以debug瞅瞅内容。
3.1 创建空白工作簿
import java.io.;import org.apache.poi.xssf.usermodel.;public class CreateWorkBook{ public static void main(String[] args)throws Exception { //Create Blank workbook XSSFWorkbook workbook = new XSSFWorkbook(); //Create file system using specific name FileOutputStream out = new FileOutputStream( new File(“createworkbook.xlsx”)); //write operation workbook using file out object workbook.write(out); out.close(); System.out.println(" createworkbook.xlsx written successfully"); }}
3.2 打开现有的工作簿
import java.io.;import org.apache.poi.xssf.usermodel.;public class OpenWorkBook
public static void main(String args[])throws Exception File file = new File(“openworkbook.xlsx”); FileInputStream fIP = new FileInputStream(file); //Get the workbook instance for XLSX file XSSFWorkbook workbook = new XSSFWorkbook(fIP); if(file.isFile() && file.exists()) { System.out.println( “openworkbook.xlsx file open successfully.”); } else { System.out.println( “Error to open openworkbook.xlsx file.”); } }}
4、方法示例:任意对象List转至为Excel文档(可用注解定义标签名和列名)
写了个方法,可以将某个类的List转换为对应的Excel文档,列名如果在不使用注解的情况下默认为属性名:
类:
@Excel(name = “学生标签页”)public class Student {
@Excel(name = “姓名”) private String name;
private boolean male;
@Excel(name = “身高”) private int height;
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public boolean isMale() { return male; }
public void setMale(boolean male) { this.male = male; }
public int getHeight() { return height; }
public void setHeight(int height) { this.height = height; }}
测试方法:
public static void main(String[] args) { List list = new ArrayList(); Student student1 = new Student(); student1.setName(“小红”); student1.setMale(false); student1.setHeight(167);
Student student2 = new Student(); student2.setName(“小明”); student2.setMale(true); student2.setHeight(185);
list.add(student1); list.add(student2);
File file = new File(“C:/Users/Dulk/Desktop/1314.xls”); createExcel(list, file);}
输出结果:
注解:
import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;
@Retention(RetentionPolicy.RUNTIME)public @interface Excel { //设置名称 public String name() default “”;}
方法:
import org.apache.log4j.Logger;import org.apache.poi.hssf.usermodel.HSSFWorkbook;import org.apache.poi.ss.usermodel.Cell;import org.apache.poi.ss.usermodel.Row;import org.apache.poi.ss.usermodel.Sheet;import org.apache.poi.ss.usermodel.Workbook;import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.util.ArrayList;import java.util.List;
/** * Excel的操作工具类 */public class ExcelUtil { private static Logger log = Logger.getLogger(ExcelUtil.class);
/** * 获取某个File文件对应的Workbook工作簿对象 */ public static Workbook gainWorkbook(File file) throws ExcelException { if (!isExcel(file)) { throw new ExcelException(“文件不是Excel类型”); } //如果文件不存在则新建 if (!file.exists()) { try { OutputStream os = new FileOutputStream(file); Workbook workbook = isOlderEdition(file) ? new HSSFWorkbook() : new XSSFWorkbook(); workbook.write(os); log.debug(“文件不存在,新建该Excel文件”); os.close();
} catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }
try { InputStream is = new FileInputStream(file); return isOlderEdition(file) ? new HSSFWorkbook(is) : new XSSFWorkbook(is);
} catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }
return null; }
/** * 判断某个Excel文件是否是2003-2007通用旧版 */ private static boolean isOlderEdition(File file) { return file.getName().matches(“.+\.(?i)xls”); }
/** * 判断文件是否是一个Excel文件 */ private static boolean isExcel(File file) { String fileName = file.getName(); String regXls = “.+\.(?i)xls”; String regXlsx = “.+\.(?i)xlsx”; return fileName.matches(regXls) || fileName.matches(regXlsx); }
/** * 将某个对象的List转换为Excel工作簿 */ public static Workbook createExcel(List list, File file) { String sheetName = “default”; if (list.size() == 0) { return null; }
Workbook workbook = null; try { Class clazz = list.get(0).getClass(); Field[] fields = clazz.getDeclaredFields(); if (clazz.isAnnotationPresent(Excel.class)) { Excel excel = (Excel) clazz.getAnnotation(Excel.class); sheetName = excel.name(); }
workbook = gainWorkbook(file); Sheet sheet = workbook.createSheet(sheetName); //创建首行 Row line = sheet.createRow(0); for (int k = 0; k < fields.length; k++) { Cell cell = line.createCell(k); String columnName = fields[k].getName(); if (fields[k].isAnnotationPresent(Excel.class)) { Excel excel = fields[k].getAnnotation(Excel.class); columnName = excel.name(); } cell.setCellValue(columnName); } //创建数据 for (int i = 1; i <= list.size(); i++) { Row row = sheet.createRow(i); for (int j = 1; j <= fields.length; j++) { Cell cell = row.createCell(j - 1); String fieldName = fields[j - 1].getName(); String fieldFirstLetterUpper = fieldName.substring(0, 1).toUpperCase(); String prefix = “get”; if (“boolean”.equals(fields[j - 1].getType().getName())) { prefix = “is”; } String methodName = prefix + fieldFirstLetterUpper + fieldName.substring(1); Method method = clazz.getMethod(methodName); cell.setCellValue(String.valueOf(method.invoke(list.get(i - 1)))); } } log.debug(“List读入完毕”); OutputStream os = new FileOutputStream(file); workbook.write(os); os.close();
} catch (ExcelException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return workbook; }}
推荐文章
最后
小编利用空余时间整理了一份《MySQL性能调优手册》,初衷也很简单,就是希望能够帮助到大家,减轻大家的负担和节省时间。
关于这个,给大家看一份学习大纲(PDF)文件,每一个分支里面会有详细的介绍。
这里都是以图片形式展示介绍,如要下载原文件以及更多的性能调优笔记(MySQL+Tomcat+JVM)!
f-1715609555835)]
这里都是以图片形式展示介绍,如要下载原文件以及更多的性能调优笔记(MySQL+Tomcat+JVM)!