轻松掌握Java:高效上传与处理XLS文件全攻略

在Java开发中,处理XLS文件是一个常见的任务,无论是用户上传文件到服务器,还是将数据从数据库导出到XLS文件,都涉及到文件的读取和写入操作。本文将详细介绍如何在Java中高效地处理XLS文件,包括文件的上传、读取、写入以及与数据库的交互。
一、文件上传
1.1 文件上传的基本流程
文件上传通常涉及以下几个步骤:
用户在客户端选择文件。
文件通过HTTP请求发送到服务器。
服务器接收文件并保存到指定位置。
1.2 使用Servlet处理文件上传
以下是一个简单的Servlet示例,用于处理文件上传:
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet(“/fileUpload”)
public class FileUploadServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 获取上传文件的输入流
InputStream fileStream = request.getPart(“file”).getInputStream();
// 设置文件保存路径
String savePath = getServletContext().getRealPath(“https://www.oryoy.com/uploads”);
// 设置文件名
String fileName = “uploaded_” + System.currentTimeMillis() + “.xls”;
// 创建文件
File file = new File(savePath, fileName);
// 保存文件
saveFile(fileStream, file);
// 返回成功信息
response.getWriter().write(“文件上传成功!”);
}

private void saveFile(InputStream in, File file) throws IOException {
// 使用缓冲流写入文件
byte[] buffer = new byte[1024];
int length;
while ((length = in.read(buffer)) > 0) {
file.write(buffer, 0, length);
}
}
}
二、文件读取
2.1 使用Apache POI读取XLS文件
Apache POI是一个开源的Java库,用于处理Microsoft Office文档,包括XLS文件。以下是一个使用Apache POI读取XLS文件的示例:
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;

public void readExcelFile(String filePath) throws IOException {
FileInputStream inputStream = new FileInputStream(new File(filePath));
Workbook workbook = new XSSFWorkbook(inputStream);
Sheet sheet = workbook.getSheetAt(0);
Row row;
Cell cell;

for (int i = 0; i <= sheet.getLastRowNum(); i++) { row = sheet.getRow(i); if (row != null) { for (int j = 0; j < row.getLastCellNum(); j++) { cell = row.getCell(j); if (cell != null) { // 处理单元格数据 System.out.print(cell.toString() + "\t"); } } System.out.println(); } } workbook.close(); inputStream.close(); } 三、文件写入 3.1 使用Apache POI写入XLS文件 以下是一个使用Apache POI写入XLS文件的示例: import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.io.FileOutputStream; import java.io.IOException; public void writeExcelFile(String filePath) throws IOException { Workbook workbook = new XSSFWorkbook(); Sheet sheet = workbook.createSheet("Sheet 1"); // 创建表头 Row header = sheet.createRow(0); header.createCell(0).setCellValue("Name"); header.createCell(1).setCellValue("Age"); header.createCell(2).setCellValue("City"); // 创建数据行 Row dataRow = sheet.createRow(1); dataRow.createCell(0).setCellValue("John Doe"); dataRow.createCell(1).setCellValue(30); dataRow.createCell(2).setCellValue("New York"); // 写入文件 FileOutputStream outputStream = new FileOutputStream(new File(filePath)); workbook.write(outputStream); workbook.close(); outputStream.close(); } 四、与数据库的交互 4.1 将数据导出到XLS文件 以下是一个将数据库中的数据导出到XLS文件的示例: import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public void exportDataToExcel(String filePath) throws IOException, SQLException { Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/database", "username", "password"); PreparedStatement statement = connection.prepareStatement("SELECT * FROM table_name"); ResultSet resultSet = statement.executeQuery(); Workbook workbook = new XSSFWorkbook(); Sheet sheet = workbook.createSheet("Data"); // 创建表头 Row header = sheet.createRow(0); ResultSetMetaData metaData = resultSet.getMetaData(); int columnCount = metaData.getColumnCount(); for (int i = 1; i <= columnCount; i++) { header.createCell(i - 1).setCellValue(metaData.getColumnName(i)); } // 创建数据行 int rowNum = 1; while (resultSet.next()) { Row dataRow = sheet.createRow(rowNum++); for (int i = 1; i <= columnCount; i++) { dataRow.createCell(i - 1).setCellValue(resultSet.getString(i)); } } // 写入文件 FileOutputStream outputStream = new FileOutputStream(new File(filePath)); workbook.write(outputStream); workbook.close(); outputStream.close(); resultSet.close(); statement.close(); connection.close(); } 通过以上步骤,您可以在Java中高效地处理XLS文件,包括上传、读取、写入以及与数据库的交互。这些示例代码可以帮助您快速开始开发,并根据实际需求进行调整和扩展。