java讀取excel文件為base64實(shí)現(xiàn)方式
使用 Apache POI 讀取 Excel 并轉(zhuǎn)換為 Base64
Apache POI 是一個(gè)流行的 Java 庫,用于操作 Microsoft Office 格式文件(如 Excel)。以下方法將 Excel 文件讀取為字節(jié)數(shù)組,再轉(zhuǎn)換為 Base64 字符串。
依賴配置(Maven)
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>5.2.3</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.2.3</version>
</dependency>
代碼實(shí)現(xiàn)
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Base64;
public class ExcelToBase64 {
public static String convertExcelToBase64(String filePath) throws IOException {
// 讀取 Excel 文件為字節(jié)數(shù)組
FileInputStream fis = new FileInputStream(filePath);
Workbook workbook = WorkbookFactory.create(fis);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
workbook.write(bos);
byte[] excelBytes = bos.toByteArray();
// 關(guān)閉資源
bos.close();
workbook.close();
fis.close();
// 轉(zhuǎn)換為 Base64
return Base64.getEncoder().encodeToString(excelBytes);
}
public static void main(String[] args) {
try {
String base64 = convertExcelToBase64("example.xlsx");
System.out.println("Base64: " + base64);
} catch (IOException e) {
e.printStackTrace();
}
}
}
使用 EasyExcel 處理大文件
若需處理大型 Excel 文件,可以使用阿里開源的 EasyExcel,其內(nèi)存占用更低。
依賴配置(Maven)
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>easyexcel</artifactId>
<version>3.3.2</version>
</dependency>
代碼實(shí)現(xiàn)
import com.alibaba.excel.EasyExcel;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Base64;
public class ExcelToBase64Easy {
public static String convertToBase64(String filePath) throws IOException {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
EasyExcel.write(bos).withTemplate(new FileInputStream(filePath)).sheet().doWrite();
byte[] bytes = bos.toByteArray();
bos.close();
return Base64.getEncoder().encodeToString(bytes);
}
public static void main(String[] args) throws IOException {
String base64 = convertToBase64("large_file.xlsx");
System.out.println("Base64: " + base64.substring(0, 50) + "...");
}
}
注意事項(xiàng)
- 文件格式支持:示例代碼支持
.xlsx(Office 2007+)。若需處理.xls(舊格式),需調(diào)整WorkbookFactory邏輯。 - 內(nèi)存管理:處理大文件時(shí),確保及時(shí)關(guān)閉流(如
FileInputStream、Workbook)。 - Base64 換行:默認(rèn)情況下
Base64.getEncoder()不添加換行符。如需換行,改用Base64.getMimeEncoder()。
常見問題解決
亂碼問題
確保文件路徑正確,且 Excel 未被其他進(jìn)程占用。若報(bào) InvalidHeaderException,檢查文件是否損壞。
性能優(yōu)化
對(duì)于超大文件,建議分塊讀取或使用流式 API(如 EasyExcel 的 read 方法)。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java實(shí)現(xiàn)FTP上傳到服務(wù)器
這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)FTP上傳到服務(wù)器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-09-09
SpringBoot整合ShardingSphere5.x實(shí)現(xiàn)數(shù)據(jù)加解密功能(最新推薦)
這篇文章主要介紹了SpringBoot整合ShardingSphere5.x實(shí)現(xiàn)數(shù)據(jù)加解密功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-06-06
Spring Boot整合RabbitMQ實(shí)例(Topic模式)
Topic Exchange 轉(zhuǎn)發(fā)消息主要是根據(jù)通配符。接下來通過本文給大家分享Spring Boot整合RabbitMQ實(shí)例(Topic模式),需要的朋友參考下吧2017-04-04
java實(shí)現(xiàn)文件上傳下載至ftp服務(wù)器
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)文件上傳下載至ftp服務(wù)器的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-06-06
SpringAOP 如何通過JoinPoint獲取參數(shù)名和值
這篇文章主要介紹了SpringAOP 通過JoinPoint獲取參數(shù)名和值的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06
javax.validation包里@NotNull等注解的使用方式
這篇文章主要介紹了javax.validation包里@NotNull等注解的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01
基于SpringBoot加載Mybatis的TypeAlias問題
這篇文章主要介紹了解決SpringBoot加載Mybatis的TypeAlias問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07

