java 通过Apache poi导出excel代码demo实例
package com.zuidaima.excel.util; import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.Map; import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook; /**
* @描述 负责将数据集(表单数据)导出Excel文件
* @author */
public class ExcelUtil { /**
* 类实例
*/
private static ExcelUtil export; /**
* excel文档
*/
private HSSFWorkbook workbook; /**
* excel sheet
*/
private HSSFSheet sheet; /**
* 字节流
*/
private OutputStream fileOutput; /**
* 声明私有构造方法
*/
private ExcelUtil() { } /**
* 产生一个excel导出工具类实例(单例模式)
*
* @return excel导出工具类对象
*/
public static ExcelUtil newInstance() {
if (export == null)
export = new ExcelUtil();
return export;
} /**
* @功能描述 设置excel文档(单表单)
* @创建人
* @创建时间 2011-5-27 下午02:25:58
* @param tName
* excel表名集
* @param tHeader
* excel表头数据集
* @param tValue
* excel表单数据集(除表头)
* @param tHeaderStyle
* excel表头单元格样式
* @param tValueStyle
* excel表单数据单元格样式(除表头)
* @param filePath
* excel文件地址
* @throws Exception
* 异常往上抛出
*/
public void exportExcel(String tName, ArrayList<String> tHeader, ArrayList<ArrayList<Object>> tValue,
Map<String, Short> tHeaderStyle, Map<String, Short> tValueStyle, String filePath) throws Exception { try {
// 当excel文档不存在时创建
workbook = new HSSFWorkbook(); // 单个表单赋值和样式
this.setSheet(tName, tHeader, tValue, tHeaderStyle, tValueStyle);
// 导出excel文件
this.export(workbook, filePath); } catch (Exception e) {
e.printStackTrace(); }
} /**
* @功能描述 设置excel文档(单表单)
* @创建人
* @创建时间 2011-5-27 下午02:25:58
* @param tName
* excel表名集
* @param tHeader
* excel表头数据集
* @param tValue
* excel表单数据集(除表头)
* @param tHeaderStyle
* excel表头单元格样式
* @param tValueStyle
* excel表单数据单元格样式(除表头)
* @throws Exception
* 异常往上抛出
*/
public InputStream exportExcelToStream(String tName, ArrayList<String> tHeader,
ArrayList<ArrayList<Object>> tValue, Map<String, Short> tHeaderStyle, Map<String, Short> tValueStyle)
throws Exception { // 当excel文档不存在时创建
workbook = new HSSFWorkbook(); // 单个表单赋值和样式
this.setSheet(tName, tHeader, tValue, tHeaderStyle, tValueStyle); // 导出excel文件
return export(workbook); } /**
* @功能描述 设置excel文档(多表单)
* @创建人
* @创建时间 2011-5-27 下午02:25:58
* @param tName
* excel表名集
* @param tHeader
* excel表头数据集
* @param tValue
* excel表单数据集(除表头)
* @param tHeaderStyle
* excel表头单元格样式
* @param tValueStyle
* excel表单数据单元格样式(除表头)
* @param filePath
* excel文件地址
* @throws Exception
* 异常往上抛出
*/
public void exportExcel(ArrayList<String> tName, ArrayList<ArrayList<String>> tHeader,
ArrayList<ArrayList<ArrayList<Object>>> tValue, ArrayList<Map<String, Short>> tHeaderStyle,
ArrayList<Map<String, Short>> tValueStyle, String filePath) throws Exception { try {
// 当excel文档不存在时创建
workbook = new HSSFWorkbook(); // for循环完成文档各个表单的赋值和样式
for (int i = 0; i < tName.size(); i++) {
this.setSheet(tName.get(i), tHeader.get(i), tValue.get(i), tHeaderStyle.get(i), tValueStyle.get(i)); // 单个表单赋值和样式
} // 导出excel文件
this.export(workbook, filePath); } catch (Exception e) {
}
} /**
* @功能描述 设置excel文档(多表单)
* @创建人
* @创建时间 2011-5-27 下午02:25:58
* @param tName
* excel表名集
* @param tHeader
* excel表头数据集
* @param tValue
* excel表单数据集(除表头)
* @param tHeaderStyle
* excel表头单元格样式
* @param tValueStyle
* excel表单数据单元格样式(除表头)
* @throws Exception
* 异常往上抛出
*/
public InputStream exportExcelToStream(ArrayList<String> tName, ArrayList<ArrayList<String>> tHeader,
ArrayList<ArrayList<ArrayList<Object>>> tValue, ArrayList<Map<String, Short>> tHeaderStyle,
ArrayList<Map<String, Short>> tValueStyle) throws Exception { // 当excel文档不存在时创建
workbook = new HSSFWorkbook(); // for循环完成文档各个表单的赋值和样式
for (int i = 0; i < tName.size(); i++) {
this.setSheet(tName.get(i), tHeader.get(i), tValue.get(i), tHeaderStyle.get(i), tValueStyle.get(i)); // 单个表单赋值和样式
}
return export(workbook);
} /**
* @功能描述 设置excel表单
* @创建人
* @创建时间 2011-5-27 下午02:23:02
* @param tName
* excel表名
* @param tHeader
* excel表头数据集
* @param tValue
* excel表单数据集(除表头)
* @param tHeaderStyle
* excel表头单元格样式
* @param tValueStyle
* excel表单数据单元格样式(除表头)
* @throws Exception
* 异常往上抛出
*/
private void setSheet(String tName, ArrayList<String> tHeader, ArrayList<ArrayList<Object>> tValue,
Map<String, Short> tHeaderStyle, Map<String, Short> tValueStyle) throws Exception { try {
// 创建表单并设置其表名
sheet = workbook.createSheet(tName); // 创建表单行
HSSFRow tRow = sheet.createRow(0); // 赋值和样式(此时,为表头行)
tRow = this.setTRow(tRow, tHeader, tHeaderStyle); // for循环完成表单数据的赋值和样式(除表头)
for (int i = 0; i < tValue.size(); i++) {
tRow = sheet.createRow(i + 1); // 获取表单行 tRow = this.setTRow(tRow, tValue.get(i), tValueStyle); // 设置当前行的数据和样式
}
} catch (Exception e) {
e.printStackTrace();
}
} /**
* @功能描述 设置excel表单行数据
* @创建人
* @创建时间 2011-5-27 下午02:22:30
* @param row
* excel表单行
* @param tRow
* excel表单行数据
* @param tHeaderStyle
* excel表头样式
* @return 设置后的的表单行
* @throws Exception
* 异常往外抛出
*/
@SuppressWarnings("unchecked")
private HSSFRow setTRow(HSSFRow row, ArrayList tRow, Map<String, Short> tHeaderStyle) throws Exception { try {
// 获取单元格样式
HSSFCellStyle cellStyle = this.setCellStyle(tHeaderStyle);
// 声明单元格
HSSFCell cell = null; // for循环完成该表单某行各个列赋值和样式
for (int i = 0; i < tRow.size(); i++) {
cell = row.createCell(i); // 获取每列单元格
cell.setCellStyle(cellStyle); // 设置样式 sheet.autoSizeColumn((short) i); // 设置单元格自适应
Object obj = tRow.get(i); // 获取当前列的值
// 判断对象所属类型, 并强转
if (obj instanceof Integer) // 当数字时
cell.setCellValue((Integer) obj);
if (obj instanceof String) // 当为字符串时
cell.setCellValue((String) obj);
if (obj instanceof Boolean) // 当为布尔时
cell.setCellValue((Boolean) obj);
if (obj instanceof Date) // 当为时间时
cell.setCellValue((Date) obj);
if (obj instanceof Calendar) // 当为时间时
cell.setCellValue((Calendar) obj);
if (obj instanceof Double) // 当为小数时
cell.setCellValue((Double) obj);
}
} catch (Exception e) {
e.printStackTrace();
}
return row; // 返回
} /**
* @功能描述 设置单元格样式
* @创建人
* @创建时间 2011-5-27 下午02:21:40
* @param fontStyle
* 样式Map集合
* @return 设置后单元格样式
* @throws Exception
* 异常往外抛出
*/
private HSSFCellStyle setCellStyle(Map<String, Short> fontStyle) throws Exception { // 声明单元格样式
HSSFCellStyle cellStyle = null;
try {
// 创建字体
HSSFFont font = workbook.createFont();
// 设置字体样式
// 设置字体颜色(红色为:HSSFFont.COLOR_RED 这里表示short类型 10)
font.setColor(fontStyle.get("color"));
// 设置字体形体(宽体为:HSSFFont.BOLDWEIGHT_BOLD 700) -- 粗体
font.setBoldweight(fontStyle.get("weight")); // 创建单元格样式
cellStyle = workbook.createCellStyle();
// 添加字体样式
cellStyle.setFont(font); } catch (Exception e) {
e.printStackTrace();
}
return cellStyle; // 返回
} /**
* @功能描述 导出Excel
* @创建人
* @创建时间 2011-5-27 下午02:57:37
* @param workbook
* excel文档
* @param filePath
* xls文件地址
* @throws Exception
* 异常往外抛出
*/
private void export(HSSFWorkbook workbook, String filePath) throws Exception { try {
// 根据指定xls文件创建文件字符流
fileOutput = new FileOutputStream(filePath);
// 将文档写入指定文件
workbook.write(fileOutput); } catch (FileNotFoundException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
// 关闭流, 释放资源
fileOutput.close();
} catch (IOException e) {
e.printStackTrace();
;
}
}
} /**
* @功能描述 获取流
* @创建人
* @创建时间 2011-5-27 下午02:57:37
* @param workbook
* excel文档
* @throws Exception
* 异常往外抛出
*/
private InputStream export(HSSFWorkbook workbook) throws IOException { ByteArrayOutputStream baos = new ByteArrayOutputStream();
try {
try {
workbook.write(baos);
} catch (IOException e) {
e.printStackTrace();
}
byte[] ba = baos.toByteArray();
ByteArrayInputStream bais = new ByteArrayInputStream(ba);
return bais;
} finally {
// 关闭流, 释放资源
baos.close();
}
}
}
package com.zuidaima.excel.util; import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.Map; import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook; /**
* @描述 负责将数据集(表单数据)导出Excel文件 */
public class ExcelUtil { /**
* 类实例
*/
private static ExcelUtil export; /**
* excel文档
*/
private HSSFWorkbook workbook; /**
* excel sheet
*/
private HSSFSheet sheet; /**
* 字节流
*/
private OutputStream fileOutput; /**
* 声明私有构造方法
*/
private ExcelUtil() { } /**
* 产生一个excel导出工具类实例(单例模式)
*
* @return excel导出工具类对象
*/
public static ExcelUtil newInstance() {
if (export == null)
export = new ExcelUtil();
return export;
} /**
* @功能描述 设置excel文档(单表单)
* @创建人
* @创建时间 2011-5-27 下午02:25:58
* @param tName
* excel表名集
* @param tHeader
* excel表头数据集
* @param tValue
* excel表单数据集(除表头)
* @param tHeaderStyle
* excel表头单元格样式
* @param tValueStyle
* excel表单数据单元格样式(除表头)
* @param filePath
* excel文件地址
* @throws Exception
* 异常往上抛出
*/
public void exportExcel(String tName, ArrayList<String> tHeader, ArrayList<ArrayList<Object>> tValue,
Map<String, Short> tHeaderStyle, Map<String, Short> tValueStyle, String filePath) throws Exception { try {
// 当excel文档不存在时创建
workbook = new HSSFWorkbook(); // 单个表单赋值和样式
this.setSheet(tName, tHeader, tValue, tHeaderStyle, tValueStyle);
// 导出excel文件
this.export(workbook, filePath); } catch (Exception e) {
e.printStackTrace(); }
} /**
* @功能描述 设置excel文档(单表单)
* @创建人
* @创建时间 2011-5-27 下午02:25:58
* @param tName
* excel表名集
* @param tHeader
* excel表头数据集
* @param tValue
* excel表单数据集(除表头)
* @param tHeaderStyle
* excel表头单元格样式
* @param tValueStyle
* excel表单数据单元格样式(除表头)
* @throws Exception
* 异常往上抛出
*/
public InputStream exportExcelToStream(String tName, ArrayList<String> tHeader,
ArrayList<ArrayList<Object>> tValue, Map<String, Short> tHeaderStyle, Map<String, Short> tValueStyle)
throws Exception { // 当excel文档不存在时创建
workbook = new HSSFWorkbook(); // 单个表单赋值和样式
this.setSheet(tName, tHeader, tValue, tHeaderStyle, tValueStyle); // 导出excel文件
return export(workbook); } /**
* @功能描述 设置excel文档(多表单)
* @创建人
* @创建时间 2011-5-27 下午02:25:58
* @param tName
* excel表名集
* @param tHeader
* excel表头数据集
* @param tValue
* excel表单数据集(除表头)
* @param tHeaderStyle
* excel表头单元格样式
* @param tValueStyle
* excel表单数据单元格样式(除表头)
* @param filePath
* excel文件地址
* @throws Exception
* 异常往上抛出
*/
public void exportExcel(ArrayList<String> tName, ArrayList<ArrayList<String>> tHeader,
ArrayList<ArrayList<ArrayList<Object>>> tValue, ArrayList<Map<String, Short>> tHeaderStyle,
ArrayList<Map<String, Short>> tValueStyle, String filePath) throws Exception { try {
// 当excel文档不存在时创建
workbook = new HSSFWorkbook(); // for循环完成文档各个表单的赋值和样式
for (int i = 0; i < tName.size(); i++) {
this.setSheet(tName.get(i), tHeader.get(i), tValue.get(i), tHeaderStyle.get(i), tValueStyle.get(i)); // 单个表单赋值和样式
} // 导出excel文件
this.export(workbook, filePath); } catch (Exception e) {
}
} /**
* @功能描述 设置excel文档(多表单)
* @创建人
* @创建时间 2011-5-27 下午02:25:58
* @param tName
* excel表名集
* @param tHeader
* excel表头数据集
* @param tValue
* excel表单数据集(除表头)
* @param tHeaderStyle
* excel表头单元格样式
* @param tValueStyle
* excel表单数据单元格样式(除表头)
* @throws Exception
* 异常往上抛出
*/
public InputStream exportExcelToStream(ArrayList<String> tName, ArrayList<ArrayList<String>> tHeader,
ArrayList<ArrayList<ArrayList<Object>>> tValue, ArrayList<Map<String, Short>> tHeaderStyle,
ArrayList<Map<String, Short>> tValueStyle) throws Exception { // 当excel文档不存在时创建
workbook = new HSSFWorkbook(); // for循环完成文档各个表单的赋值和样式
for (int i = 0; i < tName.size(); i++) {
this.setSheet(tName.get(i), tHeader.get(i), tValue.get(i), tHeaderStyle.get(i), tValueStyle.get(i)); // 单个表单赋值和样式
}
return export(workbook);
} /**
* @功能描述 设置excel表单
* @创建人
* @创建时间 2011-5-27 下午02:23:02
* @param tName
* excel表名
* @param tHeader
* excel表头数据集
* @param tValue
* excel表单数据集(除表头)
* @param tHeaderStyle
* excel表头单元格样式
* @param tValueStyle
* excel表单数据单元格样式(除表头)
* @throws Exception
* 异常往上抛出
*/
private void setSheet(String tName, ArrayList<String> tHeader, ArrayList<ArrayList<Object>> tValue,
Map<String, Short> tHeaderStyle, Map<String, Short> tValueStyle) throws Exception { try {
// 创建表单并设置其表名
sheet = workbook.createSheet(tName); // 创建表单行
HSSFRow tRow = sheet.createRow(0); // 赋值和样式(此时,为表头行)
tRow = this.setTRow(tRow, tHeader, tHeaderStyle); // for循环完成表单数据的赋值和样式(除表头)
for (int i = 0; i < tValue.size(); i++) {
tRow = sheet.createRow(i + 1); // 获取表单行 tRow = this.setTRow(tRow, tValue.get(i), tValueStyle); // 设置当前行的数据和样式
}
} catch (Exception e) {
e.printStackTrace();
}
} /**
* @功能描述 设置excel表单行数据
* @创建人
* @创建时间 2011-5-27 下午02:22:30
* @param row
* excel表单行
* @param tRow
* excel表单行数据
* @param tHeaderStyle
* excel表头样式
* @return 设置后的的表单行
* @throws Exception
* 异常往外抛出
*/
@SuppressWarnings("unchecked")
private HSSFRow setTRow(HSSFRow row, ArrayList tRow, Map<String, Short> tHeaderStyle) throws Exception { try {
// 获取单元格样式
HSSFCellStyle cellStyle = this.setCellStyle(tHeaderStyle);
// 声明单元格
HSSFCell cell = null; // for循环完成该表单某行各个列赋值和样式
for (int i = 0; i < tRow.size(); i++) {
cell = row.createCell(i); // 获取每列单元格
cell.setCellStyle(cellStyle); // 设置样式 sheet.autoSizeColumn((short) i); // 设置单元格自适应
Object obj = tRow.get(i); // 获取当前列的值
// 判断对象所属类型, 并强转
if (obj instanceof Integer) // 当数字时
cell.setCellValue((Integer) obj);
if (obj instanceof String) // 当为字符串时
cell.setCellValue((String) obj);
if (obj instanceof Boolean) // 当为布尔时
cell.setCellValue((Boolean) obj);
if (obj instanceof Date) // 当为时间时
cell.setCellValue((Date) obj);
if (obj instanceof Calendar) // 当为时间时
cell.setCellValue((Calendar) obj);
if (obj instanceof Double) // 当为小数时
cell.setCellValue((Double) obj);
}
} catch (Exception e) {
e.printStackTrace();
}
return row; // 返回
} /**
* @功能描述 设置单元格样式
* @创建人
* @创建时间 2011-5-27 下午02:21:40
* @param fontStyle
* 样式Map集合
* @return 设置后单元格样式
* @throws Exception
* 异常往外抛出
*/
private HSSFCellStyle setCellStyle(Map<String, Short> fontStyle) throws Exception { // 声明单元格样式
HSSFCellStyle cellStyle = null;
try {
// 创建字体
HSSFFont font = workbook.createFont();
// 设置字体样式
// 设置字体颜色(红色为:HSSFFont.COLOR_RED 这里表示short类型 10)
font.setColor(fontStyle.get("color"));
// 设置字体形体(宽体为:HSSFFont.BOLDWEIGHT_BOLD 700) -- 粗体
font.setBoldweight(fontStyle.get("weight")); // 创建单元格样式
cellStyle = workbook.createCellStyle();
// 添加字体样式
cellStyle.setFont(font); } catch (Exception e) {
e.printStackTrace();
}
return cellStyle; // 返回
} /**
* @功能描述 导出Excel
* @创建人
* @创建时间 2011-5-27 下午02:57:37
* @param workbook
* excel文档
* @param filePath
* xls文件地址
* @throws Exception
* 异常往外抛出
*/
private void export(HSSFWorkbook workbook, String filePath) throws Exception { try {
// 根据指定xls文件创建文件字符流
fileOutput = new FileOutputStream(filePath);
// 将文档写入指定文件
workbook.write(fileOutput); } catch (FileNotFoundException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
// 关闭流, 释放资源
fileOutput.close();
} catch (IOException e) {
e.printStackTrace();
;
}
}
} /**
* @功能描述 获取流
* @创建人
* @创建时间 2011-5-27 下午02:57:37
* @param workbook
* excel文档
* @throws Exception
* 异常往外抛出
*/
private InputStream export(HSSFWorkbook workbook) throws IOException { ByteArrayOutputStream baos = new ByteArrayOutputStream();
try {
try {
workbook.write(baos);
} catch (IOException e) {
e.printStackTrace();
}
byte[] ba = baos.toByteArray();
ByteArrayInputStream bais = new ByteArrayInputStream(ba);
return bais;
} finally {
// 关闭流, 释放资源
baos.close();
}
}
}
java 通过Apache poi导出excel代码demo实例的更多相关文章
- 使用Apache POI导出Excel小结--导出XLS格式文档
使用Apache POI导出Excel小结 关于使用Apache POI导出Excel我大概会分三篇文章去写 使用Apache POI导出Excel小结--导出XLS格式文档 使用Apache POI ...
- java中使用poi导出excel表格数据并且可以手动修改导出路径
在我们开发项目中,很多时候会提出这样的需求:将前端的某某数据以excel表格导出,今天就给大家写一个简单的模板. 这里我们选择使用poi导出excel: 第一步:导入需要的jar包到 lib 文件夹下
- apache POI 导出excel相关方法
apache POI 操作excel无比强大.同时有操作word和ppt的接口. 下面讲解poi中常用方法. 1,设置列宽 HSSFSheet sheet = wb.getSheetAt(0); sh ...
- Java使用Apache POI进行Excel导入和导出
Manve依赖 <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml --> <dependency> ...
- Java中用Apache POI生成excel和word文档
概述: 近期在做项目的过程中遇到了excel的数据导出和word的图文表报告的导出功能.最后决定用Apache POI来完毕该项功能.本文就项目实现过程中的一些思路与代码与大家共享.同一时候.也作为自 ...
- Apache POI导出excel表格
项目中我们经常用到导出功能,将数据导出以便于审查和统计等.本文主要使用Apache POI实现导出数据. POI中文文档 简介 ApachePOI是Apache软件基金会的开放源码函式库,POI提供A ...
- apache poi导出excel报表
Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程式对Microsoft Office格式档案读和写的功能.POI为"P ...
- java使用Apache POI操作excel文件
官方介绍 HSSF is the POI Project's pure Java implementation of the Excel '97(-2007) file format. XSSF is ...
- 使用org.apache.poi导出Excel表格
public HSSFWorkbook MakeExcel(List<TransactionLogVO> logList) { // SimpleDateFormat sdf = new ...
随机推荐
- SQL Server DBA 文章:116篇 --DBA_Huangzj
http://blog.csdn.net/DBA_Huangzj/article/category/1133081
- Linux Hook 笔记
相信很多人对"Hook"都不会陌生,其中文翻译为"钩子".在编程中, 钩子表示一个可以允许编程者插入自定义程序的地方,通常是打包好的程序中提供的接口. 比如,我 ...
- Android集成友盟社会化分享功能
1. 产品概述 友盟社会化组件,可以让移动应用快速具备社会化分享.登录.评论.喜欢等功能,并提供实时.全面的社会化数据统计分析服务. 指南将会手把手教你使用社会化组件SDK,用5分钟为APP增加新浪 ...
- python安全编程
##入门 这将是第一个一系列关于python编程的博客文章.python是一门非常强大的语言,因为它有信息安全社区的支撑.这意味着很多工具都是由python编写并且可以在脚本中调用很多模块.使用模块的 ...
- Git与GitLab
Git与GitLab 一.Git Git是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目. Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个 ...
- (转)Vue.use源码分析
我想有过vue开发经验的,对于vue.use并不陌生.当使用vue-resource或vue-router等全局组件时,必须通过Vue.use方法引入,才起作用.那么vue.use在组件引入之前到底做 ...
- 【原】使用StarUML画用例图
在写一份升级方案的时候,发现文字描述半天,好多句子,依然不容易被人看明白,使用visio画了个流程图,后来觉得画个时序图是最清晰得了. 于是在找了一个工具: startUML,当然,做时序图,建模之类 ...
- es6模块学习总结
模块功能主要由两个命令构成:export和import. export用于输出对外接口,improt用于输人接口 exprot 可以输出变量,也可以输出函数.类. 输出变量的三种写法 // 写法一ex ...
- python——深刻理解Python中的元类(metaclass)
译注:这是一篇在Stack overflow上 很热的帖子.提问者自称已经掌握了有关Python OOP编程中的各种概念,但始终觉得元类(metaclass)难以理解.他知道这肯定和自省有关,但仍然觉 ...
- linux/unix核心设计思想
1) 程序应该小而专一,程序应该尽量的小,且仅仅专注于一件事上.不要开发那些看起来实用可是90%的情况都用不到的特性: 2) 程序不仅仅要考虑性能, 程序的可移植性更重要,shell和perl.pyt ...