cuốn sách gpt4 ai đã làm

Ngoại lệ java.lang.outofmemory xảy ra khi đọc tệp excel (xlsx) bằng POI

In lại Tác giả: Taklimakan Thời gian cập nhật: 2023-11-01 22:52:00 hai mươi bốn 4
mua khóa gpt4 Nike

Tôi đang phát triển một ứng dụng web đọc dữ liệu từ tệp excel (xlsx). Tôi đang sử dụng POI để đọc bảng excel. Vấn đề là khi tôi cố đọc tệp excel, máy chủ đưa ra lỗi sau:

nhập mô tả hình ảnh ở đây

Tệp excel tôi đang cố đọc có kích thước gần 80 MB. Có giải pháp nào cho vấn đề này không?

Trên thực tế, người dùng đang tải tệp lên và ứng dụng đang cố đọc tệp sau khi lưu tệp vào đĩa. Đoạn mã tôi sử dụng để thử nghiệm là:

 Tệp đã lưuFile = Tệp mới (file_path);

FileInputStream fis = null;
thử {

fis = FileInputStream mới(savedFile);
XSSFWorkbook xWorkbook = XSSFWorkbook mới(fis);
XSSFSheet xSheet = xWorkbook.getSheetAt(5);

Hàng lặp = xSheet.rowIterator();
trong khi (rows.hasNext()) {
XSSFRow row = (XSSFRow) row.next();
Các ô lặp = row.cellIterator();

Danh sách dữ liệu = new ArrayList();
trong khi (cell.hasNext()) {
Ô XSSFCell = (XSSFCell) cell.next();
System.out.println(cell.getStringCellValue());
data.add(ô);
}

}
} catch (IOException e) {
e.printStackTrace();
}

câu trả lời hay nhất

Một điều sẽ khác là thời gian tệp được mở. Nếu bạn có một tệp, hãy chuyển nó vào! Việc sử dụng inputStream yêu cầu lưu mọi thứ vào bộ nhớ, việc này sẽ chiếm dung lượng. Vì bạn không cần đệm nên không cần!

Nếu bạn đang chạy bản dựng POI hàng đêm mới nhất thì điều đó rất đơn giản. Mã của bạn trở thành:

Tệp tệp = Tệp mới (file_path);
OPCPackage opcPackage = OPCPackage.open(file);
Sổ làm việc XSSFWorkbook = XSSFWorkbook mới(opcPackage);

Mặt khác, nó rất giống nhau:

Tệp tệp = Tệp mới (file_path);
OPCPackage opcPackage = OPCPackage.open(file.getAbsolutePath());
Sổ làm việc XSSFWorkbook = XSSFWorkbook mới(opcPackage);

Điều này sẽ giải phóng một số bộ nhớ cho bạn, có thể là đủ. Nếu không, và bạn không thể tăng đủ dung lượng vùng nhớ heap Java để đáp ứng thì bạn sẽ phải ngừng sử dụng XSSF UserModel.

Ngoài UserModel thân thiện với người dùng hiện tại mà bạn đang sử dụng, POI còn hỗ trợ xử lý tệp cấp thấp hơn. Cách tiếp cận cấp thấp hơn này khó sử dụng hơn vì bạn không có nhiều trợ giúp khác nhau yêu cầu toàn bộ tệp trong bộ nhớ. Tuy nhiên, khi bạn xử lý tệp dưới dạng luồng, bộ nhớ sẽ hiệu quả hơn nhiều. Để bắt đầu, hãy xem Phần hướng dẫn sử dụng XSSF và SAX (API sự kiện)trên trang web POI. Hãy thử và xem các ví dụ khác nhau.

Về ngoại lệ java.lang.outofmemory khi sử dụng POI để đọc tệp excel (xlsx), chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/11118703/

hai mươi bốn 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress