共计 4741 个字符,预计需要花费 12 分钟才能阅读完成。
场景案例:
假如有一个学生信息管理系统,须要从 Excel 文件中读取学生的姓名、年龄、问题等数据,并将这些数据存储到零碎中进行进一步的解决和治理。具体来说,在数据导入 / 导出零碎中调用这个函数,并传入 Excel 文件作为参数,就能够失去蕴含学生信息的后果。而后,能够对这个后果进行进一步的解决,比方将学生数据存储到数据库中或进行其余业务逻辑操作。
在 Java 开发的学生信息管理系统中,读取 Excel 数据是一个常见的需要。Excel 文件经常被用作学生信息的输出源,因而,理解如何应用 Java 读取 Excel 数据对于开发人员来说是一项必备技能。本文将具体介绍如何应用 Java 读取 Excel 文件,并对异常情况做出解决。
一、环境筹备
在开始之前,请确保你曾经装置了 Java 开发环境,并理解根本的 Java 语法。为了解决 Excel 文件,咱们将应用 Apache POI 库,它是一个风行的 Java 库,专门用于解决 Microsoft Office 文件。如果你还没有装置 Apache POI,你能够通过 Maven 或 Gradle 将其增加到你的我的项目中。
二、代码实现
首先,咱们须要导入必要的库。在 Java 中,这通常是通过 import 语句实现的。而后,咱们将创立一个类并定义一个办法来读取 Excel 文件。
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Iterator;
接下来,咱们定义一个名为 readExcel 的办法,该办法承受一个文件门路作为参数,并返回一个蕴含所有学生信息的列表。
public List<Student> readExcel(String filePath) {List<Student> students = new ArrayList<>();
try (FileInputStream fis = new FileInputStream(new File(filePath))) {Workbook workbook = new XSSFWorkbook(fis);
Sheet sheet = workbook.getSheetAt(0); // 读取第一个 sheet
Iterator<Row> rowIterator = sheet.iterator(); // 创立一个行迭代器
while (rowIterator.hasNext()) {Row row = rowIterator.next();
Cell cell = row.getCell(0); // 获取第一列的单元格
String studentName = cell.getStringCellValue();
students.add(new Student(studentName));
}
} catch (IOException e) {e.printStackTrace();
}
return students;
}
这个办法首先关上指定的 Excel 文件,而后读取第一个 sheet 中的每一行。对于每一行,它获取第一列的单元格,并从中获取学生名。而后,它将这个学生名增加到学生列表中。如果在读取文件或解决数据时产生谬误,它将打印谬误堆栈跟踪。
三、异样解决
在解决文件和数据时,可能会产生多种谬误。例如,文件可能不存在,或者文件可能不是 Excel 文件。此外,单元格可能不蕴含咱们冀望的数据。为了解决这些状况,你应该增加更多的谬误检查和解决代码。例如:
1、查看文件是否存在:在关上文件之前,能够查看文件是否存在。如果文件不存在,你能够抛出一个异样或返回一个谬误音讯。
2、查看文件是否是 Excel 文件:在关上文件之前,能够尝试读取文件的几个字节,并查看它们是否是 Excel 文件的签名(例如,”Poi” 对于 POI 库)。如果不是,你能够抛出一个异样或返回一个谬误音讯。
3、查看单元格的数据类型:如果单元格不蕴含字符串,那么 getStringCellValue 办法将抛出一个 RuntimeException。你能够应用 getCellType 办法查看单元格的数据类型,并依据须要解决数据。
4、解决空行:如果 sheet 中有一行是空的,那么 rowIterator.hasNext() 将返回 false,导致咱们进行解决数据。你能够增加一个查看来确保每一行都蕴含数据。
四、FuncGPT(慧函数)实操
不同的定制化的数据处理需要场景可能有轻微的细节差别,依照以上教程从头开始写又太繁琐,这时候开发人员能够想好大抵的需要,通过询问 FuncGPT(慧函数),仍然能够通过应用 Apache POI 库疾速实现 Excel 文件的读取。
输出需要:
读取 EXCEL 数据,入参:File file,出参:List<Map<String, Object>>
点击生成代码取得残缺的代码。
// 类名:ExcelDataReader
// 函数名:readExcelData
// 函数性能:读取 Excel 数据并返回 List<Map<String, Object>> 类型的后果
// POM 依赖包:// <dependency>
// <groupId>org.apache.poi</groupId>
// <artifactId>poi</artifactId>
// <version>4.1.2</version>
// </dependency>
// <dependency>
// <groupId>org.apache.poi</groupId>
// <artifactId>poi-ooxml</artifactId>
// <version>4.1.2</version>
// </dependency>
import org.apache.poi.ss.usermodel.*;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class ExcelDataReader {
/**
* 读取 Excel 数据并返回 List<Map<String, Object>> 类型的后果
* @param file Excel 文件
* @return Excel 数据的 List<Map<String, Object>> 后果
* @throws IOException 当读取 Excel 文件呈现谬误时抛出 IOException
*/
public static List<Map<String, Object>> readExcelData(File file) throws IOException {List<Map<String, Object>> dataList = new ArrayList<>(); // 创立存储 Excel 数据的 List
FileInputStream fis = new FileInputStream(file); // 创立文件输出流
Workbook workbook = WorkbookFactory.create(fis); // 创立 Workbook 对象
Sheet sheet = workbook.getSheetAt(0); // 获取第一个 Sheet
int rowCount = sheet.getLastRowNum(); // 获取行数
Row headerRow = sheet.getRow(0); // 获取题目行
int columnCount = headerRow.getLastCellNum(); // 获取列数
for (int i = 1; i <= rowCount; i++) { // 遍历每一行(跳过题目行)Row row = sheet.getRow(i);
Map<String, Object> rowData = new HashMap<>();
for (int j = 0; j < columnCount; j++) { // 遍历每一列
Cell cell = row.getCell(j);
String columnName = headerRow.getCell(j).getStringCellValue(); // 获取列名
Object cellValue;
switch (cell.getCellType()) { // 依据单元格类型获取单元格值
case STRING:
cellValue = cell.getStringCellValue();
break;
case NUMERIC:
cellValue = cell.getNumericCellValue();
break;
case BOOLEAN:
cellValue = cell.getBooleanCellValue();
break;
case FORMULA:
cellValue = cell.getCellFormula();
break;
default:
cellValue = null;
}
rowData.put(columnName, cellValue); // 将列名和单元格值存入 rowData
}
dataList.add(rowData); // 将 rowData 存入 dataList
}
workbook.close(); // 敞开 Workbook 对象
fis.close(); // 敞开文件输出流
return dataList; // 返回 Excel 数据的后果
}
}
// 函数示例
// 读取 Excel 数据示例
// 入参:file,Excel 文件
// 出参:dataList,Excel 数据的 List<Map<String, Object>> 后果
// 调用示例:// File file = new File("data.xlsx");
// List<Map<String, Object>> dataList = ExcelDataReader.readExcelData(file);
// System.out.println(dataList);
// 输入后果:例如,Excel 数据为:// | Name | Age | Grade |
// |-------|-----|-------|
// | Alice | 18 | A |
// | Bob | 20 | B |
// 则输入后果为:[{Name=Alice, Age=18, Grade=A}, {Name=Bob, Age=20, Grade=B}]
// 示意 Excel 数据被封装为 List<Map<String, Object>> 的格局
FuncGPT(慧函数)就像一个线上的“名师”,能够在短时间内依据你的需要给到一个清晰易懂,可读性优良,绝对精准的“解决方案”,甚至是拿来即用的代码。而在特定的需要场景下,开发人员能够依据本人的理论需要在 FuncGPT(慧函数)生成的代码根底上进行批改。
比方,因为 EXCEL 整体格局内容的话,会影响读取无效行或者无效列的实在数据,故须要对行和列进行相干无效校验。在原有代码的根底上,能够做以下一些批改:
1)首先判断列,因为列的实在长度会影响到行的读取;
2)读取第一行表头,如果遇到空白列,则认定无效列为上一个列的下标。
3)获取到无效列之后 去遍历每一行数数据,如果有整行为空则跳出循环,完结数据获取。
五、总结
通过以上代码和解释,咱们理解了如何应用 Java 和 Apache POI 库来读取 Excel 文件。这对于开发学生信息管理系统等利用十分重要。同时,对可能呈现的异样进行适当的解决也是开发过程中不可或缺的一部分。心愿这篇文章能帮忙你实现你的我的项目。