Apache POI:Java读写Excel文件实战指南

🌌 365登录器 ⏱️ 2025-09-19 19:48:24 👤 admin 👁️ 1699 ⭐ 619
Apache POI:Java读写Excel文件实战指南

本文还有配套的精品资源,点击获取

简介:本篇将详细指导如何使用Apache POI在Java中读取、解析和写入Excel文件。Apache POI是一个开源项目,专门用于处理Microsoft Office文件格式。通过本篇,读者将学习如何导入POI库,读取.xlsx和.xls文件,创建新的Excel工作簿,解析单元格数据,并将处理后的数据输出到新的或现有的Excel文件中。同时,文章将提供性能优化的技巧,并讨论在处理大量数据时如何管理内存和流,以避免内存溢出。

1. Apache POI简介

Apache POI是一个流行的Java库,它允许开发者以编程方式读取和写入Microsoft Office格式的文件,如Excel、Word和PowerPoint等。这个库对于处理Office文档非常实用,特别是在企业应用或数据集成系统中。Apache POI对于开发者来说,是一个强大的工具,能够极大地简化文档操作的过程,而不必关心底层的二进制格式细节。

1.1 POI库的适用场景

在不同的开发场景中,POI可以用于:

自动化测试 :生成测试报告或模拟用户操作。 数据处理 :导入导出数据到Excel,方便非技术人员查看和编辑。 报表生成 :自动化地创建具有专业外观的文档,用于商务报告或数据分析展示。

1.2 POI的核心组件

Apache POI的核心组件是HSSF、XSSF和HWPF,分别对应Excel的 .xls 格式、 .xlsx 格式和Word的 .doc 格式。除此之外,还提供了其他组件以支持其他Office文档格式,如XWPF用于处理 .docx 格式文件。

1.3 POI的版本和升级

Apache POI经常更新以修复bug和提供新功能,开发者应当选择稳定且支持所需功能的版本。为了保持良好的兼容性,了解不同版本间的差异也非常重要。

1.4 开始使用Apache POI

在本文档的后续章节中,我们将详细介绍如何导入POI库、选择合适的版本以及如何在你的项目中开始使用这个强大的库。

以上内容为第一章的基础介绍,旨在让读者对Apache POI有个初步了解,并为后续章节中更具体的POI操作方法打下基础。

2. 导入Apache POI库

Apache POI是一个广泛使用的Java库,它提供了操作Microsoft Office文档的API,特别适用于处理Excel和Word文档。为了在Java项目中使用POI,开发者需要进行一系列的环境搭建步骤。接下来,我们将深入探讨如何导入Apache POI库,并配置项目环境,以及如何选择合适的库版本。

2.1 POI库的环境搭建

要使用Apache POI库,首先需要将它导入到你的Java项目中。这通常通过两种方式完成:通过Maven进行依赖管理,或者在IDE中手动添加库文件。我们将一一介绍这两种方法。

2.1.1 Maven依赖配置

在Maven项目中,添加POI库是非常简单的,只需要在项目的 pom.xml 文件中添加相应的依赖配置即可。以下是一个如何添加Apache POI为项目依赖的示例配置:

org.apache.poi

poi

5.2.3

org.apache.poi

poi-ooxml

5.2.3

上面的代码展示了如何添加Apache POI的核心库和处理Office Open XML格式所需的额外库。版本号 5.2.3 是示例,建议使用最新的稳定版本来确保得到最新的功能和安全性修复。

2.1.2 IDE项目配置

如果你的项目不是基于Maven的,或者你想手动添加POI库,可以在IDE中进行配置。这里以IntelliJ IDEA为例,来介绍如何手动添加POI库:

打开项目设置,点击”Project Structure”。 在左侧导航中选择”Libraries”。 点击”+”号,选择”From Maven…”,然后搜索 org.apache.poi ,选择相应的库。 确认添加后,你可以在”Modules”中将该库分配给需要使用POI的模块。

完成以上步骤后,Apache POI库就被添加到了你的项目中,你可以在项目中的任何位置使用它。

2.2 POI库的版本和选择

Apache POI库不断更新以修复bug、增加新功能和改进性能。选择合适的版本对于确保项目稳定运行至关重要。

2.2.1 选择合适的POI版本

选择合适的POI版本时,需要考虑以下几点:

兼容性 :确保所选版本与你的Java运行环境兼容。 稳定性 :选择一个被广泛使用的稳定版本,以减少遇到未报告错误的风险。 特性需求 :确认该版本包含你项目所需的所有特性。

2.2.2 版本间的差异对比

随着新版本的发布,Apache POI会引入新特性、改进API和修复已知问题。在选择版本时,了解不同版本间的差异非常重要。

性能改进 :新版本可能会包含对性能进行优化的更新。 API变更 :新版本可能对API进行了一些修改,这些改变可能需要你更新现有的代码。 已知问题修复 :新版本通常解决了旧版本中存在的问题,这些修复可能对你的项目至关重要。

POI版本 主要特性 支持的文件格式 性能 兼容性 3.x 基础功能支持 HSSF, XSSF, HWPF 较低 Java 1.4 4.x 增加高级特性 HSSF, XSSF, HWPF, HSLF 提升 Java 5及以上 5.x API重构,增强 HSSF, XSSF, HWPF, HSLF, XSSFSheet 高 Java 8及以上

通过比较不同版本的特性,开发者可以更好地理解每个版本的优缺点,并根据项目需求做出明智的选择。

以上就是关于导入Apache POI库的详细说明,希望读者能够根据自身的需求和项目环境,选择合适的版本,并正确地将POI库集成到自己的Java项目中。接下来的章节我们将深入探讨Apache POI的更多功能和高级用法。

3. Excel文件的读取操作

3.1 Excel文件结构理解

3.1.1 工作簿、工作表和单元格概念

Excel 文件本质上是一种电子表格,它被组织为由行和列组成的单元格网格。在 Apache POI 中,这种结构被映射为三个核心组件:工作簿(Workbook)、工作表(Sheet)和单元格(Cell)。

工作簿(Workbook) :这是整个 Excel 文件的容器,代表一个 Excel 文件。在 POI 中,工作簿对应于 XSSFWorkbook (用于 .xlsx 文件)或 HSSFWorkbook (用于旧版的 .xls 文件)类。 工作表(Sheet) :工作表是工作簿中的单个工作区域,可视为一个表格,用户可以在其中输入数据。它在 POI 中对应 Sheet 接口,可以是 XSSFSheet 或 HSSFSheet 实现类。 单元格(Cell) :单元格是工作表中行和列的交叉点,数据是被输入和存储在单元格中。在 POI 中,单元格由 Cell 接口表示,并具体实现为 XSSFCell 或 HSSFCell 。

理解这些概念对于熟练使用 POI 进行 Excel 文件处理至关重要。通过 POI 提供的 API,可以方便地访问和操作 Excel 文件中的这些组件,从而实现数据的读取、写入和修改。

3.1.2 文件格式和兼容性问题

当处理 Excel 文件时,需要考虑不同文件格式的兼容性问题。Microsoft Excel 使用了两种主要的文件格式: .xls 和 .xlsx 。前者是基于老式的 Binary Interchange File Format(BIFF),而后者则是采用 Office Open XML 格式(一种基于 XML 的压缩文件格式)。

.xls(BIFF8) : .xls 文件格式自 Excel 97 至 Excel 2003 广泛使用,由 HSSFWorkbook 类支持。 .xlsx(OOXML) : .xlsx 文件格式从 Excel 2007 开始使用,由 XSSFWorkbook 类支持。

Apache POI 的 HSSF 和 XSSF 模块分别用于处理这两种格式,由于它们的数据结构和存储机制大相径庭,因此开发者在使用 POI 处理 Excel 文件时必须注意选择正确的工作簿类。

3.2 使用POI读取Excel文件

3.2.1 打开Excel文件的方法

使用 Apache POI 读取 Excel 文件首先需要创建对应格式的工作簿对象,并加载文件。下面是一个示例代码,展示如何打开 .xlsx 格式的 Excel 文件:

import org.apache.poi.ss.usermodel.*;

import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.FileInputStream;

import java.io.File;

import java.io.IOException;

public class ReadExcelExample {

public static void main(String[] args) {

try {

// 指定 Excel 文件路径

String excelFilePath = "example.xlsx";

// 创建 FileInputStream 读取文件流

FileInputStream inputStream = new FileInputStream(new File(excelFilePath));

// 创建 XSSFWorkbook 对象,用于操作 .xlsx 文件

Workbook workbook = new XSSFWorkbook(inputStream);

// 接下来可以操作 workbook 对象读取数据...

// 最后记得关闭文件流

inputStream.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

以上代码块展示了如何使用 FileInputStream 打开 .xlsx 文件并加载到 XSSFWorkbook 对象中。同样的方法适用于 .xls 文件,只需替换为 HSSFWorkbook 类型。

3.2.2 遍历工作表和单元格数据

遍历工作表和单元格数据是处理 Excel 文件时的一项基础操作。下面是遍历工作表和单元格并读取数据的示例代码:

// 假设 workbook 已经被加载如上节代码所示

// 获取第一个工作表

Sheet sheet = workbook.getSheetAt(0);

// 遍历工作表中的所有行

for (Row row : sheet) {

// 遍历行中的所有单元格

for (Cell cell : row) {

// 获取单元格内容

String cellValue = getCellValue(cell);

System.out.println(cellValue);

}

}

// 定义一个辅助方法,用于获取单元格的值

private String getCellValue(Cell cell) {

DataFormatter formatter = new DataFormatter();

return formatter.formatCellValue(cell);

}

在遍历过程中, Cell 类用于表示和操作单元格, Row 类用于表示和操作行。上述代码段展示了如何使用 Apache POI API 获取单元格的数据,并打印出来。注意,单元格中可能包含不同类型的数据,如数值、文本、公式等, getCellValue 方法利用 DataFormatter 类来处理这些不同类型的单元格数据。

以上内容详细解释了如何利用 Apache POI 库读取和遍历 Excel 文件,为处理更复杂的操作打下了基础。

4. 单元格数据的解析

4.1 单元格内容读取

当我们深入到单元格级别的操作时,正确地解析和读取单元格中的数据是至关重要的。Apache POI提供了丰富的API来帮助开发者读取单元格中的数据,并处理一些常见的数据类型,如文本、数字、日期等。

4.1.1 基本数据类型的读取方法

Apache POI能够通过特定的API方法读取不同类型的单元格内容。例如,读取文本可以通过 Cell.getRichStringCellValue() 方法。对于数字类型的单元格,可以通过 Cell.getNumericCellValue() 来获取。这些方法能够处理大部分的单元格类型,但需要注意的是,在处理空值或格式错误时,这些方法可能会抛出 CellNotFoundException 或 IllegalStateException 。

// 示例代码:读取单元格中的文本

Row row = sheet.getRow(0); // 获取第一行

Cell cell = row.getCell(0); // 获取第一列的单元格

if (cell.getCellType() == CellType.STRING) {

String text = cell.getRichStringCellValue().getString();

System.out.println(text);

}

4.1.2 公式和日期的处理

Excel单元格中可能会包含公式,这些公式在被读取时不会直接展示其计算结果,而是展示公式本身。因此,如果我们想获取公式计算后的值,则需要调用 Cell.getCellFormula() 方法,并使用 Workbook.getCreationHelper().createFormulaEvaluator().evaluateFormulaCell(cell) 来获取计算结果。

对于日期类型的处理,Excel将日期存储为自1900年1月0日以来的天数和小数部分表示的秒数。读取日期时,可以通过 Cell.getDateCellValue() 获取一个 java.util.Date 实例,或者使用 Cell.getCellStyle().getDataFormatString() 和 Workbook.createDataFormat() 来获取自定义格式的日期。

4.2 数据类型的识别和转换

4.2.1 自动类型识别机制

Apache POI的单元格读取API具有自动类型识别的机制。当你读取一个单元格的值时,不需要指定数据类型,API会根据单元格的内部类型自动转换为相应的Java类型。如果单元格的类型是数字,POI会根据数字的具体格式来决定是返回一个整数、浮点数还是科学计数法形式。

// 示例代码:自动类型识别和读取

if (cell.getCellType() == CellType.NUMERIC) {

double numericValue = cell.getNumericCellValue();

System.out.println(numericValue);

}

4.2.2 类型转换的最佳实践

尽管Apache POI提供了方便的自动类型识别机制,但在实际应用中,我们可能需要根据业务需求进行特定类型的转换。例如,从文本格式转换为布尔值,或者从数字转换为特定格式的日期。为了实现这一点,我们需要根据单元格的类型和内容进行判断,并选择合适的方法进行转换。

// 示例代码:类型转换

switch (cell.getCellType()) {

case STRING:

String cellValue = cell.getStringCellValue();

// 进行字符串转换逻辑

break;

case BOOLEAN:

boolean booleanValue = cell.getBooleanCellValue();

// 进行布尔值转换逻辑

break;

// 其他case处理

}

在编写类型转换逻辑时,我们需要注意以下几点: - 对于文本类型的单元格,需要根据实际情况判断是否包含数字或日期,并相应地进行转换。 - 对于布尔类型的单元格,直接使用 Cell.getBooleanCellValue() 方法即可。 - 对于数字类型的单元格,如果需要转换为特定格式的字符串,可以使用 SimpleDateFormat 类来格式化日期。

通过上述方法,我们可以有效地读取和解析单元格中的数据,并将其转换为所需格式,以便进一步处理和分析。

5. 新Excel文件的创建和写入

在上一章中,我们已经了解了如何通过Apache POI读取Excel文件,并且探索了单元格数据的解析。本章我们将焦点转向如何使用Apache POI创建新的Excel文件以及如何将数据写入这些文件。

5.1 创建新的Excel文件

创建Excel文件的过程涉及到创建一个工作簿,然后向该工作簿中添加工作表,最后对工作表进行样式和格式的设置。

5.1.1 工作簿、工作表的创建

Apache POI中,工作簿被表示为 XSSFWorkbook 类的实例(对于 .xlsx 格式),而工作表则是 XSSFSheet 类的实例。下面的代码演示了创建一个新的Excel工作簿,并添加一个工作表的过程:

import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import org.apache.poi.xssf.usermodel.XSSFSheet;

import org.apache.poi.xssf.usermodel.XSSFRow;

import org.apache.poi.xssf.usermodel.XSSFCreationHelper;

public class NewExcelFileCreation {

public static void main(String[] args) throws Exception {

// 创建一个工作簿实例

XSSFWorkbook workbook = new XSSFWorkbook();

// 创建工作表

XSSFSheet sheet = workbook.createSheet("New Sheet");

// 创建行和单元格

XSSFRow row = sheet.createRow(0);

XSSFCell cell = row.createCell(0);

// 设置单元格内容

cell.setCellValue("Hello, World!");

// 输出文件

try (FileOutputStream outputStream = new FileOutputStream("workbook.xlsx")) {

workbook.write(outputStream);

}

}

}

在这段代码中,首先创建了一个 XSSFWorkbook 对象,然后创建了一个名为”New Sheet”的工作表。接着,在工作表中创建了一行和一个单元格,并设置了单元格的值为”Hello, World!”。最后,通过 FileOutputStream 将工作簿写入到名为”workbook.xlsx”的文件中。

5.1.2 样式和格式的设置

Apache POI提供了丰富的API来设置单元格的样式和格式。下面的代码展示了如何设置字体、边框和单元格样式:

import org.apache.poi.xssf.usermodel.XSSFCellStyle;

import org.apache.poi.xssf.usermodel.XSSFFont;

import org.apache.poi.xssf.usermodel.XSSFColor;

import org.apache.poi.ss.usermodel.CellStyle;

import org.apache.poi.ss.usermodel.ClientAnchor;

import org.apache.poi.ss.util.CellRangeAddress;

import org.apache.poi.xssf.usermodel.XSSFSheet;

import org.apache.poi.xssf.usermodel.XSSFWorkbook;

// ... 省略其他import和类定义 ...

public static void main(String[] args) throws Exception {

// ... 省略创建工作簿和工作表的代码 ...

// 创建样式对象

XSSFCellStyle style = workbook.createCellStyle();

// 创建字体对象

XSSFFont font = workbook.createFont();

font.setFontHeightInPoints((short) 16); // 设置字体大小

font.setFontName("Arial"); // 设置字体名称

style.setFont(font); // 将字体设置到样式对象中

// 设置边框样式

style.setBorderTop(CellStyle.BORDER_THIN);

style.setBorderBottom(CellStyle.BORDER_THIN);

style.setBorderLeft(CellStyle.BORDER_THIN);

style.setBorderRight(CellStyle.BORDER_THIN);

// 设置背景色

style.setFillForegroundColor(new XSSFColor(new java.awt.Color(200, 200, 200)));

style.setFillPattern(CellStyle.SOLID_FOREGROUND);

// 设置单元格样式

cell.setCellStyle(style);

// 合并单元格

sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 2));

// ... 省略写入文件的代码 ...

}

在这段代码中,我们首先创建了一个 XSSFCellStyle 对象来表示样式,然后创建了一个 XSSFFont 对象来定义字体样式。我们设置字体为Arial,大小为16,并且设置了边框和背景色。接着,我们将这个样式应用到了单元格上,并且将第一行的前三列合并。最后,我们将工作簿写入到文件中。

5.2 数据的写入和格式化

在创建了Excel文件的基础结构后,我们可能需要向工作表中填充数据,并且对这些数据进行格式化以满足特定的视觉效果。

5.2.1 写入不同类型数据的方法

Apache POI允许你向单元格中写入不同类型的数据,包括数字、日期、布尔值等。下面的代码展示了如何写入不同类型的数据到单元格中:

import org.apache.poi.ss.usermodel.DateUtil;

import org.apache.poi.ss.usermodel.Cell;

import org.apache.poi.ss.usermodel.Row;

// ... 省略其他import和类定义 ...

public static void main(String[] args) throws Exception {

// ... 省略创建工作簿和工作表的代码 ...

Row row = sheet.createRow(1);

Cell cell = row.createCell(0);

// 写入字符串数据

cell.setCellValue("String Value");

// 写入数字数据

Cell numberCell = row.createCell(1);

numberCell.setCellValue(1234);

// 写入布尔值数据

Cell booleanCell = row.createCell(2);

booleanCell.setCellValue(true);

// 写入日期数据

Cell dateCell = row.createCell(3);

dateCell.setCellValue(DateUtil.parseDate("2023-04-01"));

// ... 省略写入文件的代码 ...

}

在这段代码中,我们创建了新的行和单元格,并向单元格中写入了字符串、数字、布尔值以及日期类型的数据。 DateUtil.parseDate 方法用于将日期字符串转换为内部格式。

5.2.2 高级格式化技巧

除了基础的格式化外,Apache POI还允许你定义更高级的格式化技巧,如条件格式化、数据验证等。下面的代码展示了如何使用条件格式化来突出显示满足特定条件的单元格:

import org.apache.poi.ss.usermodel.ConditionalFormatting;

import org.apache.poi.ss.usermodel.DataFormat;

import org.apache.poi.ss.usermodel.Sheet;

import org.apache.poi.ss.usermodel.Workbook;

import org.apache.poi.ss.util.CellRangeAddressList;

import org.apache.poi.xssf.usermodel.XSSFConditionalFormattingRule;

import org.apache.poi.xssf.usermodel.XSSFSheet;

import org.apache.poi.xssf.usermodel.XSSFWorkbook;

// ... 省略其他import和类定义 ...

public static void main(String[] args) throws Exception {

// ... 省略创建工作簿和工作表的代码 ...

// 创建条件格式化规则

XSSFConditionalFormattingRule rule = workbook.createConditionalFormattingRule(XSSFConditionalFormattingRule.GREATER_THAN, "1000");

// 创建数据格式

DataFormat dataFormat = workbook.createDataFormat();

XSSFSheet sheet = (XSSFSheet) workbook.getSheetAt(0);

// 定义要格式化的单元格范围

CellRangeAddressList range = new CellRangeAddressList(1, 1, 0, 3);

// 应用条件格式化到指定范围

ConditionalFormatting formatting = sheet.getOrCreateConditionalFormatting(range);

formatting.addConditionalFormattingRule(rule);

formatting.createPatternFormatting().setDataFormat(dataFormat.getFormat("[>1000]General"));

// ... 省略写入文件的代码 ...

}

在这段代码中,我们创建了一个条件格式化规则,该规则会检查单元格中的值是否大于1000。如果大于1000,则应用格式化规则。我们还使用 createPatternFormatting 方法定义了满足条件后的单元格格式。

通过本章的介绍,我们已经掌握了使用Apache POI创建新的Excel文件以及写入和格式化数据的基本技巧。现在,你可以开始将这些知识应用到实际工作中,以自动化和优化你的数据处理流程。在下一章中,我们将探讨如何更新已经存在的Excel文件,包括修改已有数据和批量更新数据等高级操作。

6. 现有Excel文件的更新操作

更新现有Excel文件是日常工作中常见的需求,可以实现对已有数据的修改、追加或删除等操作。Apache POI提供了丰富的API来完成这些任务。

6.1 打开已有Excel文件

在更新Excel文件之前,必须先将其打开。Apache POI允许我们以不同的模式打开文件,以满足不同的需求。

6.1.1 读写模式的选择

Apache POI提供了多种读写模式,包括只读、读/写和读/写/创建模式。选择合适的模式非常重要,因为它决定了我们对文件操作的权限。

// 以只读模式打开文件

try (InputStream is = new FileInputStream("example.xlsx")) {

Workbook workbook = WorkbookFactory.create(is);

// 进行读取操作...

}

// 以读/写模式打开文件

try (FileInputStream fis = new FileInputStream("example.xlsx")) {

Workbook workbook = WorkbookFactory.create(fis);

// 进行读写操作...

}

// 以读/写/创建模式打开文件

try (FileOutputStream fos = new FileOutputStream("example.xlsx")) {

Workbook workbook = new XSSFWorkbook();

// 进行读写操作...

}

6.1.2 文件的打开和关闭机制

Apache POI采用try-with-resources语句来自动管理资源,确保文件在操作完成后被正确关闭。这不仅可以保证系统的稳定性,还可以避免资源浪费。

try (Workbook workbook = WorkbookFactory.create(new FileInputStream("example.xlsx"))) {

// 执行各种操作

}

// 在try-with-resources语句块结束时,workbook资源将自动关闭

6.2 更新工作表和单元格数据

一旦文件被打开,我们就可以更新其内容了。更新操作包括修改已有单元格数据、删除行/列,以及追加新的数据等。

6.2.1 修改已有数据

修改数据是最基本的操作之一。要修改单元格数据,首先需要获取工作表,然后找到对应的行和单元格,并设置新的值。

try (Workbook workbook = WorkbookFactory.create(new FileInputStream("example.xlsx"))) {

Sheet sheet = workbook.getSheetAt(0);

Row row = sheet.getRow(2); // 获取第三行

if (row == null) {

row = sheet.createRow(2); // 如果第三行不存在,则创建

}

Cell cell = row.getCell(1); // 获取第二列的单元格

if (cell == null) {

cell = row.createCell(1); // 如果第二列的单元格不存在,则创建

}

cell.setCellValue("New Data"); // 修改单元格数据

}

6.2.2 批量更新和追加数据

对于需要批量更新数据的情况,我们应该尽量减少对工作表的访问次数,以提高操作效率。Apache POI允许我们一次性填充多行数据。

try (Workbook workbook = WorkbookFactory.create(new FileInputStream("example.xlsx"))) {

Sheet sheet = workbook.getSheetAt(0);

int lastRowNum = sheet.getLastRowNum();

for (int i = 0; i < 10; i++) {

Row row = sheet.getRow(lastRowNum + i + 1);

if (row == null) {

row = sheet.createRow(lastRowNum + i + 1);

}

Cell cell = row.createCell(0);

cell.setCellValue("Data " + (lastRowNum + i + 1));

}

}

以上示例展示了如何批量在Excel文件的末尾追加数据。通过创建多行并一次性赋值,我们提高了代码的执行效率。

在进行更新操作时,还需要注意文件的权限问题。如果尝试在没有写权限的情况下打开文件进行写操作,将会抛出异常。因此,在执行更新前确认文件权限也是非常重要的一个环节。

本文还有配套的精品资源,点击获取

简介:本篇将详细指导如何使用Apache POI在Java中读取、解析和写入Excel文件。Apache POI是一个开源项目,专门用于处理Microsoft Office文件格式。通过本篇,读者将学习如何导入POI库,读取.xlsx和.xls文件,创建新的Excel工作簿,解析单元格数据,并将处理后的数据输出到新的或现有的Excel文件中。同时,文章将提供性能优化的技巧,并讨论在处理大量数据时如何管理内存和流,以避免内存溢出。

本文还有配套的精品资源,点击获取

🛸 相关文章

葫芦娃大作战最强英雄推荐 英雄强度排行
bet28365365备用

葫芦娃大作战最强英雄推荐 英雄强度排行

📅 09-05 👁️ 3663
时空猎人最高多少级介绍
365登录器

时空猎人最高多少级介绍

📅 07-09 👁️ 9119
OpenCV入门(2):图像的基本概念
365bet真人网

OpenCV入门(2):图像的基本概念

📅 07-23 👁️ 8002