java讀取大數據量excel文件
1. java利用poi讀大數據量xlsx除了用xml方式讀取外,還有其他方法嗎
poi是把excel當做【文檔】來處理的,自然只有XSSFWorkbook類來操作它,也就是你說的xml方式。在poi的眼裡,excel文檔里的並不是【數據】而是【表格】。
你如果想要把excel當做【數據源】來處理,應該用odbc的方式,將你需要的excel文件變成一個odbc數據源,然後用ResultSet set = smt.executeQuery("select * from [sheet1$]");來讀取數據,效率跟access表現相當(畢竟excel有數據量上限,實際表現大多數時候都比access還要快)
2. 怎麼使用java Poi解決導入excel表格大數據量時的內存溢出問
不要一次全部讀入,分批讀入
~
~
~
~
3. java excel poi 大數據量50W 內存溢出
Workbook workbook = new SXSSFWorkbook(1000);
poi有個機制 每次往內存中寫1000條數據,這個1000你可以改的 盡量別大於10000條數據,寫完1000條數據後再重新寫,這樣就不會內存溢出了。
4. java poi Excel大數據量導入怎麼提高速度
記得有個屬性,
POI3.8的SXSSF包是XSSF的一個擴展版本,支持流處理,在生成大數據量的電子表格且堆空間有限時使用。SXSSF通過限制內存中可訪問的記錄行數來實現其低內存利用,當達到限定值時,新一行數據的加入會引起老一行的數據刷新到硬碟。
比如內存中限制行數為100,當行號到達101時,行號為0的記錄刷新到硬碟並從內存中刪除,當行號到達102時,行號為1的記錄刷新到硬碟,並從內存中刪除,以此類推。
rowAccessWindowSize代表指定的內存中緩存記錄數,默認為100,此值可以通過
new SXSSFWorkbook(int rowAccessWindowSize)或SXSSFSheet.setRandomAccessWindowSize(int windowSize)來設置。
5. java讀取大量Excel,怎麼在這個方法上面進行擴展
增加jvm啟動內存
程序中及時釋放內存,比如,excel中讀取一行後,就把這一行保存到資料庫,內然後java內設置為容null,讓GC釋放內存。然後一些list之類的,不用了也clear+setNull掉
excel7萬數據的話,應該幾百M內存就夠了,不算過分
6. 三萬多條數據的Excel文檔怎樣用Java讀出
解析40萬數據的實例 http://blog.csdn.net/dallas16/article/details/6954264
7. 如何用JAVA讀取EXCEL文件裡面的數據
使用poi能解決你的問題
或者是
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import static java.lang.System.out;
public class FileTest {
/**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
String string = "";
File file = new File("c:" + File.separator + "xxx.xls");
FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
String str;
while((str = br.readLine()) != null) {
string += str;
}
out.println(string);
}
}
8. Java如何導入大數據量excel,現在導入單個excel有幾十萬的數據,會出現內
用一些好的框架工具 spring batch
9. java怎麼讀取很大的excel(20w條數據),怎麼通過位元組流獲取到單元格的內容
使用java poi
package webservice;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
public class ExcelController {
@SuppressWarnings("deprecation")
public void excel() throws FileNotFoundException, IOException{
String filename = "d:\\excel.xls";
HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(filename));
//按名引用excel工作表
// HSSFSheet sheet = workbook.getSheet("JSP");
//也可以用以下方式來獲取excel的工作表,採用工作表的索引值
HSSFSheet sheet = workbook.getSheetAt(0);
HSSFRow row ;
HSSFCell cell1;
int rows=sheet.getLastRowNum();
for(int icount=0;icount<rows;icount++){
row = sheet.getRow(icount);
int line=row.getPhysicalNumberOfCells();
for(int j=0;j<line;j++){
cell1= row.getCell(j);
System.out.println(cell1+"--"+icount+"---"+j);
}
}
//列印讀取值
// System.out.println(cell.getStringCellValue());
//新建一輸出流
FileOutputStream fout = new FileOutputStream(filename); //PS:filename 是你另存為的路徑,不處理直接寫入模版文件
//存檔
workbook.write(fout);
fout.flush();
//結束關閉
fout.close();
}
public HSSFCell getCell(HSSFRow row, int index) {
// 取得分發日期單元格
HSSFCell cell = row.getCell(index);
// 如果單元格不存在
if (cell == null) {
// 創建單元格
cell = row.createCell(index);
}
// 返回單元格
return cell;
}
public static void main(String[] args) {
ExcelController ec = new ExcelController();
try {
ec.excel();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}