利用poi实现java导出数据到excel

POI简介:Jakarta POI 是一套用于访问微软格式文档的Java API。Jakarta POI有很多组件组成,其中有用于操作Excel格式文件的HSSF和用于操作Word的HWPF,在各种组件中目前只有用于操作Excel的HSSF相对成熟。

官方主页,

API文档

现在用的比较多的都是用POI技术来导出或者导入Excel,所以我们就用POI吧,用POI导出Excel我们首先要下载所需的jar包然后导入到我们的项目中,用maven的同学只需找到相关

1、依赖加入到pom.xml里面即可。

<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.14</version>
</dependency>
<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.14</version>
</dependency>

2、excel的工具类excelToolClass 代码:

package com.wondersgroup.materiel.bomsys.bom.utils;import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;
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.HSSFRichTextString;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.ss.util.Region;public class excelToolClass {private HSSFWorkbook wb = null;// 得到Excel工作簿对象private HSSFSheet sheet = null;// 得到Excel工作表对象public excelToolClass(HSSFWorkbook wb, HSSFSheet sheet) {this.wb = wb;this.sheet = sheet;}/*** 创建通用的Excel头** @param headString 头部显示的字符* @param colSum     该报表的列数*///第一行public void createNormalHead(String headString) {// 设置第一行HSSFRow row = sheet.createRow(0);// 创建Excel工作表的行HSSFCell cell = row.createCell(0);// 创建Excel工作表指定行的单元格row.setHeight((short) 1000);// 设置高度// 定义单元格为字符串类型cell.setCellType(HSSFCell.ENCODING_UTF_16);// 中文处理cell.setCellValue(new HSSFRichTextString(headString));// 指定合并区域CellRangeAddress region = new CellRangeAddress(0, 0, 0, 8);sheet.addMergedRegion(region);// 定义单元格格式,添加单元格表样式,并添加到工作簿HSSFCellStyle cellStyle = wb.createCellStyle();// 设置单元格水平对齐类型cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 指定单元格居中对齐cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 指定单元格垂直居中对齐cellStyle.setWrapText(true);// 指定单元格自动换行// 设置单元格字体HSSFFont font = wb.createFont();font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);font.setFontName("微软雅黑");// 字体font.setFontHeightInPoints((short) 24);// 设置字体cellStyle.setFont(font);cell.setCellStyle(cellStyle);}//第二行  public void createNormalTwoRow(String headString0,String headString1) {// 设置第一行  两列HSSFRow row = sheet.createRow(1);// 创建Excel工作表的行HSSFCell cell10 = row.createCell(0);// 创建Excel工作表指定行的单元格row.setHeight((short) 1000);// 设置高度// 定义单元格为字符串类型cell10.setCellType(HSSFCell.ENCODING_UTF_16);// 中文处理cell10.setCellValue(new HSSFRichTextString(headString0));HSSFCell cell14 = row.createCell(4);// 创建Excel工作表指定行的单元格// 定义单元格为字符串类型cell14.setCellType(HSSFCell.ENCODING_UTF_16);// 中文处理cell14.setCellValue(new HSSFRichTextString(headString1));// 指定合并区域CellRangeAddress region1 = new CellRangeAddress(1, 1, 0, 3);//1103sheet.addMergedRegion(region1);CellRangeAddress region2 = new CellRangeAddress(1, 1, 4, 8);//1148sheet.addMergedRegion(region2);// 定义单元格格式,添加单元格表样式,并添加到工作簿HSSFCellStyle cellStyle = wb.createCellStyle();// 设置单元格水平对齐类型cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 指定单元格居中对齐cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 指定单元格垂直居中对齐cellStyle.setWrapText(true);// 指定单元格自动换行// 设置单元格字体HSSFFont font = wb.createFont();font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);font.setFontName("微软雅黑");// 字体font.setFontHeightInPoints((short) 10);// 设置字体cellStyle.setFont(font);cell10.setCellStyle(cellStyle);cell14.setCellStyle(cellStyle);}//第三行   每两个合并为一个单元格public void createNormalThreeRow(String headString0,String headString1,String headString2,String headString3) {// 设置第三行  四格HSSFRow row2 = sheet.createRow(2);// 创建Excel工作表的行HSSFCell cell20 = row2.createCell(0);// 创建Excel工作表指定行的单元格row2.setHeight((short) 1000);// 设置高度cell20.setCellType(HSSFCell.ENCODING_UTF_16);// 中文处理cell20.setCellValue(new HSSFRichTextString(headString0));HSSFCell cell22 = row2.createCell(2);// 创建Excel工作表指定行的单元格cell22.setCellType(HSSFCell.ENCODING_UTF_16);// 中文处理cell22.setCellValue(new HSSFRichTextString(headString1));HSSFCell cell24 = row2.createCell(4);// 创建Excel工作表指定行的单元格cell24.setCellType(HSSFCell.ENCODING_UTF_16);// 中文处理cell24.setCellValue(new HSSFRichTextString(headString2));HSSFCell cell26 = row2.createCell(6);// 创建Excel工作表指定行的单元格cell26.setCellType(HSSFCell.ENCODING_UTF_16);// 中文处理cell26.setCellValue(new HSSFRichTextString(headString3));// 指定合并区域CellRangeAddress region1 = new CellRangeAddress(2, 2, 0, 1);CellRangeAddress region2 = new CellRangeAddress(2, 2, 2, 3);CellRangeAddress region3 = new CellRangeAddress(2, 2, 4, 5);CellRangeAddress region4 = new CellRangeAddress(2, 2, 6, 7);sheet.addMergedRegion(region1);sheet.addMergedRegion(region2);sheet.addMergedRegion(region3);sheet.addMergedRegion(region4);// 定义单元格格式,添加单元格表样式,并添加到工作簿HSSFCellStyle cellStyle = wb.createCellStyle();// 设置单元格水平对齐类型cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 指定单元格居中对齐cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 指定单元格垂直居中对齐cellStyle.setWrapText(true);// 指定单元格自动换行// 设置单元格字体HSSFFont font = wb.createFont();font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);font.setFontName("微软雅黑");// 字体font.setFontHeightInPoints((short) 10);// 设置字体cellStyle.setFont(font);cell20.setCellStyle(cellStyle);cell22.setCellStyle(cellStyle);cell24.setCellStyle(cellStyle);cell26.setCellStyle(cellStyle);}/*** 创建报表第四行* * @param params 统计条件数组* @param colSum 需要合并到的列索引**/@SuppressWarnings("deprecation")public void createNormalFourRow(List<String> list, int colSum) {// 创建第四行HSSFRow row1 = sheet.createRow(3);row1.setHeight((short) 400);// 设置高度
//      HSSFCell cell2 = row1.createCell(0);// 创建Excel工作表指定行的单元格
//      cell2.setCellType(HSSFCell.ENCODING_UTF_16);// 中文处理// 指定合并区域//      CellRangeAddress region = new CellRangeAddress(0, 0, 0, colSum);
//        sheet.addMergedRegion(region);// 定义单元格格式,添加单元格表样式,并添加到工作簿HSSFCellStyle cellStyle = wb.createCellStyle();cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 指定单元格居中对齐cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 指定单元格垂直居中对齐cellStyle.setWrapText(true);// 指定单元格自动换行// 设置单元格字体HSSFFont font = wb.createFont();font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);font.setFontName("宋体");// 字体font.setFontHeightInPoints((short) 10);// 设置字体cellStyle.setFont(font);// HSSFCellStyle.ALIGN_CENTER 设定居中for (int i = 0; i < list.size(); i++) {cteateCell(wb, row1, i, HSSFCellStyle.ALIGN_CENTER, list.get(i), cellStyle);}}/*** 设置报表标题** @param columHeader 标题字符串数组*/public void createColumHeader(List<Map<String, Object>> listInfo) {// 定义单元格格式,添加单元格表样式,并添加到工作簿HSSFCellStyle cellStyle = wb.createCellStyle();cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 指定单元格居中对齐cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 指定单元格垂直居中对齐cellStyle.setWrapText(true);// 指定单元格自动换行// 单元格字体HSSFFont font = wb.createFont();font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);font.setFontName("宋体");// 字体font.setFontHeightInPoints((short) 10);// 设置字体cellStyle.setFont(font);// 设置单元格背景色// cellStyle.setFillForegroundColor(HSSFColor.GREY_25_PERCENT.index);// cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);HSSFCell cell3 = null;for (int i = 0; i < listInfo.size(); i++) {// 循环插入数据HSSFRow row2 = sheet.createRow(i + 4);row2.setHeight((short) 400);// 指定行高cell3 = row2.createCell(0);cell3.setCellStyle(cellStyle);cell3.setCellValue(new HSSFRichTextString(String.valueOf(i)));cell3 = row2.createCell(1);cell3.setCellStyle(cellStyle);if (listInfo.get(i).get("prodCodeSellPtr") != null) {cell3.setCellValue(new HSSFRichTextString(listInfo.get(i).get("prodCodeSellPtr").toString()));// DESC} else {cell3.setCellValue(new HSSFRichTextString(""));}cell3 = row2.createCell(2);cell3.setCellStyle(cellStyle);if (listInfo.get(i).get("invPartDescriptionC") != null) {cell3.setCellValue(new HSSFRichTextString((String) listInfo.get(i).get("invPartDescriptionC")));// PART  inv_part_description_c} else {cell3.setCellValue(new HSSFRichTextString(""));}cell3 = row2.createCell(3);cell3.setCellStyle(cellStyle);if (listInfo.get(i).get("package_") != null) {cell3.setCellValue(new HSSFRichTextString((String) listInfo.get(i).get("package_")));// PACKAGE} else {cell3.setCellValue(new HSSFRichTextString(""));}cell3 = row2.createCell(4);cell3.setCellStyle(cellStyle);if (listInfo.get(i).get("prodSupperStr") != null) {cell3.setCellValue(new HSSFRichTextString((String) listInfo.get(i).get("prodSupperStr")));// MANUFA} else {cell3.setCellValue(new HSSFRichTextString(""));// MANUFA}cell3 = row2.createCell(5);cell3.setCellStyle(cellStyle);if (listInfo.get(i).get("smtFlagStr") != null) {cell3.setCellValue(new HSSFRichTextString(listInfo.get(i).get("smtFlagStr").toString()));// ASSY} else {cell3.setCellValue(new HSSFRichTextString(""));// ASSY}cell3 = row2.createCell(6);cell3.setCellStyle(cellStyle);cell3.setCellType(HSSFCell.CELL_TYPE_NUMERIC);if (listInfo.get(i).get("how") != null) {cell3.setCellValue(new HSSFRichTextString((String) listInfo.get(i).get("how").toString()));// QTY} else {cell3.setCellValue(new HSSFRichTextString(""));}cell3 = row2.createCell(7);cell3.setCellStyle(cellStyle);if (listInfo.get(i).get("top") != null) {cell3.setCellValue(new HSSFRichTextString((String) listInfo.get(i).get("top").toString()));// top} else {cell3.setCellValue(new HSSFRichTextString(""));}cell3 = row2.createCell(8);cell3.setCellStyle(cellStyle);if (listInfo.get(i).get("bottom") != null) {cell3.setCellValue(new HSSFRichTextString((String) listInfo.get(i).get("bottom").toString()));// bottom} else {cell3.setCellValue(new HSSFRichTextString(""));}cell3 = row2.createCell(9);cell3.setCellStyle(cellStyle);cell3.setCellType(HSSFCell.CELL_TYPE_NUMERIC);if (listInfo.get(i).get("std_cost") != null) {cell3.setCellValue(new HSSFRichTextString((String) listInfo.get(i).get("std_cost").toString()));// price} else {cell3.setCellValue(new HSSFRichTextString("0.00"));}int h=i+5;cell3 = row2.createCell(10);cell3.setCellStyle(cellStyle);cell3.setCellType(HSSFCell.CELL_TYPE_FORMULA);// 设置计算公式if (listInfo.get(i).get("std_cost") != null&& listInfo.get(i).get("how") != null) {cell3.setCellFormula("G"+h+"*J"+h);} else {cell3.setCellValue(new HSSFRichTextString("0.00"));}}}/*** 创建内容单元格** @param wb    HSSFWorkbook* @param row   HSSFRow* @param col   short型的列索引* @param align 对齐方式* @param val   列值*/public void cteateCell(HSSFWorkbook wb, HSSFRow row, int col, short align, String val, HSSFCellStyle cellstyle) {HSSFCell cell = row.createCell(col);cell.setCellType(HSSFCell.ENCODING_UTF_16);cell.setCellValue(new HSSFRichTextString(val));cell.setCellStyle(cellstyle);}/*** 创建合计行** @param colSum    需要合并到的列索引* @param cellValue*/public void createLastSumRow(int colSum, List<String> list) {// 定义单元格格式,添加单元格表样式,并添加到工作簿HSSFCellStyle cellStyle = wb.createCellStyle();cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 指定单元格居中对齐cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 指定单元格垂直居中对齐cellStyle.setWrapText(true);// 指定单元格自动换行// 单元格字体HSSFFont font = wb.createFont();font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);font.setFontName("宋体");font.setFontHeight((short) 250);cellStyle.setFont(font);// 获取工作表最后一行HSSFRow lastRow = sheet.createRow((short) (sheet.getLastRowNum() + 1));HSSFCell sumCell = lastRow.createCell(0);// 创建Excel工作表指定行的单元格sumCell.setCellValue(new HSSFRichTextString("合计"));sumCell.setCellStyle(cellStyle);// 合并 最后一行的第零列-最后一行的第一列
//        sheet.addMergedRegion(new Region(sheet.getLastRowNum(), (short) 0,
//        sheet.getLastRowNum(), (short) colSum));// 指定合并区域for (int i = 2; i < (list.size() + 2); i++) {// 定义最后一行的第三列sumCell = lastRow.createCell(i);sumCell.setCellStyle(cellStyle);// 定义数组 从0开始。sumCell.setCellValue(new HSSFRichTextString(list.get(i - 2)));}}/*** 输入EXCEL文件** @param fileName 文件名*/public void outputExcel(String fileName) {FileOutputStream fos = null;try {fos = new FileOutputStream(new File(fileName));wb.write(fos);fos.close();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}public HSSFWorkbook getWb() {return wb;}public void setWb(HSSFWorkbook wb) {this.wb = wb;}public HSSFSheet getSheet() {return sheet;}public void setSheet(HSSFSheet sheet) {this.sheet = sheet;}}

3、service调用excelToolClass:

public void importBomExcelItem(List<Map<String, Object>> list, String filepath, String productName, String version,String date, String edituserName) throws UnsupportedEncodingException {if (count == true) {count = false;zipPath = filepath;}String excelPath = filepath + "\\" + productName + ".xls";String worksheetTitle = list.get(0).get("custPartCode") + "Excel导出信息";// sheet名String sheetName = "数据1";HSSFWorkbook wb = new HSSFWorkbook();HSSFSheet sheet = wb.createSheet(sheetName);// 定义sheet名excelToolClass exportExcel = new excelToolClass(wb, sheet);// 调用Excel工具类excelPath = new String(excelPath.getBytes("GBK"), "GBK");// 修改编码格式// 定义第二行标题List<String> l = new ArrayList<String>();l.add("ITEM");l.add("DESC");l.add("PART");l.add("PACKAGE");l.add("MANUFA");l.add("ASSY");l.add("QTY");l.add("TOP");l.add("BOTTOM");l.add("PRICE");l.add("AMOUNT");// 定义第一行 创建报表头部exportExcel.createNormalHead("BILL OF MATERIAL 产品物料清单");// 定义第二行if (productName.equals("")) {exportExcel.createNormalTwoRow("Product Name:", "Product Name:");} else {exportExcel.createNormalTwoRow("Product Name:" + productName, "Product Name:" + productName);}// 定义第三行String c1 = "BOM Revision:" + version, c2 = "DATE:" + date, c3 = "Edit UserName :" + edituserName,c4 = "Approved :";if (version.equals("")) {c1 = "BOM Revision:";}if (date.equals("")) {c2 = "DATE:";}if (edituserName.equals("")) {c3 = "Edit UserName :";}exportExcel.createNormalThreeRow(c1, c2, c3, c4);// 定义第四行exportExcel.createNormalFourRow(l, 8);// 导入数据exportExcel.createColumHeader(list);// 输出文件流,把相应的Excel工作簿 输出到本地exportExcel.outputExcel(excelPath);}
public String importBomExcel(Map<String, Object> paramMap, String filePar) throws UnsupportedEncodingException {Integer productid = Integer.parseInt((String) paramMap.get("productid"));Data0017 data0017 = data0017Mapper.selectByKeyId(productid);String productName = data0017.getInvPartDescriptionC();String version = "";if (data0017.getPeVersion() != null) {version = data0017.getPeVersion();}String date = "";if (data0017.getCreatetime() != null) {date = data0017.getCreatetime().toString();}String edituserName = "";if (data0017.getEditUserName() != null) {edituserName = data0017.getEditUserName();}String filePathFather = createFile(filePar, productName);Map<String, Object> checkParam = new HashMap();checkParam.put("productid", productid);checkParam.put("pageSize", 10);checkParam.put("pageIndex", 0);List<MaterielBom> bomList = queryBom(checkParam);List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();for (int i = 0; i < bomList.size(); i++) {list.add(ObjectToMapUtil.object2Map(bomList.get(i)));}importBomExcelItem(list, filePathFather, productName, version, date, edituserName);for (int j = 0; j < list.size(); j++) {String bomType = list.get(j).get("bomType").toString();if (!"1".equals(bomType)) {checkParam.put("productid", list.get(j).get("infoid").toString());importBomExcel(checkParam, filePathFather);}}return filePathFather;}
 // 导出bom excel表String zipPath = "";boolean count = true;public String importExcel(Map<String, Object> paramMap, String filePar) throws Throwable {importBomExcel(paramMap, filePar);zipFile(zipPath);File file = new File(zipPath);deleteIt(file);// return "http://localhost:8080/ybsjtc/"+filename+".zip";return zipPath;}

4、Controller代码:

// 导出BOM表@ResponseBody@RequestMapping(value = "exportBom", method = RequestMethod.POST)public Map<String, Object> exportBom(@RequestParam Map<String, Object> paramMap, HttpServletRequest request)throws Throwable {String catalinaHome = System.getProperty("catalina.base");String doenloadPath = null;if (catalinaHome.contains("org.eclipse.wst.server.core")) {doenloadPath = catalinaHome + File.separator + "wtpwebapps";} else {doenloadPath = catalinaHome + File.separator + "webapps";}doenloadPath = doenloadPath + File.separator + "ybsjtc" + File.separator + "resource" + File.separator+ "download" + File.separator;Map<String, Object> result = new HashMap<String, Object>();String path = materielBomService.importExcel(paramMap, doenloadPath);result.put("data", path);return result;}

java将实体数据导出到excel,压缩,删除等一系列~相关推荐

  1. java后台将数据导出到Excel表格

    简单粗暴直接贴代码,把所有主要代码全部糅合在一块展示出来: /**     * 设置导出xls文件的表头          */         public static final String[ ...

  2. java百万条数据导出到excel表格

    JAVA解析Excel工具EasyExcel Java解析.生成Excel比较有名的框架有Apache poi.jxl.但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一 ...

  3. java生成html表格数据_使用Java将表格数据导出成Excel格式

    前言:本文使用后台处理的办法导出前端表格中显示的数据. 引入依赖 org.apache.poi poi 3.17 书写PoiUtils public classPoiUtils {public sta ...

  4. java导出excel 序号_java web将数据导出为Excel格式文件代码片段

    本文实例为大家分享了java web将数据导出为Excel格式文件的具体代码,供大家参考,具体内容如下 1.jsp代码 2.js代码 function getVerExcel() { window.l ...

  5. 阿里开源(EasyExcel):使用Java将数据导出为Excel表格、带样式----》java web下载 Excel文件

    目录 一.技术选型 二.实现过程 1.导入依赖 2.编写工具类 EasyExcelUtil 3.公用参数类 EasyExcelParams 4.表格样式实体类 MyWriteHandler 5.数据实 ...

  6. java中将查询数据导出_如何在R中将数据框导出到Excel

    java中将查询数据导出 What if I tell, that you can export data frames to excel in R within a couple of minute ...

  7. 使用java在后台将数据导出为excel文件

    本文主要讲的是怎么使用java将数据导出为Excel文件,xls格式的. 例如:我从前台查询到的数据,要把数据进行导出为excl格式的文件.需要将前台的查询条件(数据)传递到后台,后台拿到数据,写sq ...

  8. java json删除指定元素_简洁而优雅,Python Tablib实现将数据导出为Excel, Json等N种格式...

    遇见 Tablib 我们在 Python 实际开发过程中,经常涉及将数据导出为 Excel.Csv.Yaml.Json 等各种格式的文件的需求,一些粗鲁的实现方式是通过安装各种第三方模块以支持不同格式 ...

  9. 关于数据导出成excel表

    关于数据导出成excel表 咱们这里分享简单导出成excel表和筛选导出excel表,希望对各位有帮助,欢迎大家交流和点赞!!!! 我在这里使用的是一个导出工具类,如下: package cn.ms. ...

最新文章

  1. RxJava Timer:代替handler
  2. hdu 5909 Tree Cutting——点分治(树形DP转为序列DP)
  3. 150929.js过完
  4. leetcode389. 找不同
  5. java muki_再次学习 java 类的编译
  6. 默认参数,命名参数,可变参数
  7. 在服务器托管中asp***的防范注意些什么?
  8. 使用base64 对Json 的返回数据进行优化
  9. Hibernate的Cascade——级联操作
  10. 心情随笔(三):注入新的血液
  11. opencv人脸检测报错,(-215:Assertion failed)cv::CascadeClassifier::detectMultiScale‘
  12. Unity 粒子特效(Particle System)大小自适应和层级的一些问题
  13. linux硬盘速率测试,【Linux】测试硬盘读写速度
  14. 开始使用Mac OS X
  15. 分子量-算法竞赛习题3-2:给出一种物质的分子式(不带括号),求分子量。本题中的分子式只包含4种原子,分别为C, H, O, N,原子量分别为12.01, 1.008, 16.00, 14.01。
  16. Android 插件化原理(三),通过hook启动插件Activity,修改Resources,调用插件资源
  17. 你对软件测试了解多少?这篇文章会给你不一样的启示!
  18. SQL注入实战 绕WTS-WAF
  19. 计算机底层02-计算机指令与指令集
  20. bboss ioc快速入门教程

热门文章

  1. Android 原生支持 Opus、AV1!但你真正要了解的还有更多
  2. 毕业设计 单片机智能温控农业大棚系统 - 物联网 嵌入式
  3. stata构造所在区县的平均互联网使用状况语句
  4. 类型萃取类型检查 Type-Traits LibraryType Checks --- C++20
  5. Bootstrap JavaScript插件:轮播插件 (carousel.js)
  6. Error: EPERM: operation not permitted(权限问题 errro permit)
  7. 人物姿势怎么画?侧身、侧边的初学者人物姿势绘画技巧
  8. c++操作xml文件
  9. 微众java面试_微众面试经验
  10. 奇偶数列(输出起始奇数最小的数列的最小奇数和数列长度)