2017-10-27 1 views
1

Ich habe 1 Million Datensätze in einem Excel-Blatt. Die Client-Anforderung besteht darin, diese Datei in das CSV-Format zu konvertieren.import xlsx bulk data java

Ich habe versucht, den folgenden Satz von Code,

File src = new File("C:\\test.xlsx") 
File dest = new File("C:\\test.csv") 
src.renameTo(dest); 

Dies ist die Datei zu konvertieren. Aber wenn ich öffne, erhalte ich einen Fehler beim Öffnen der Datei.

Auch habe ich versucht, den folgenden Code,

class XlstoCSV 
    { 
    public static void main(String[] args) 
    { 
      File inputFile = new File("C:\test.xls"); 
      File outputFile = new File("C:\output.csv"); 
       // For storing data into CSV files 
    StringBuffer data = new StringBuffer(); 
    try 
    { 
    FileOutputStream fos = new FileOutputStream(outputFile); 

    // Get the workbook object for XLS file 
    HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(inputFile)); 
    // Get first sheet from the workbook 
    HSSFSheet sheet = workbook.getSheetAt(0); 
    Cell cell; 
    Row row; 

    // Iterate through each rows from first sheet 
    Iterator<Row> rowIterator = sheet.iterator(); 
    while (rowIterator.hasNext()) 
    { 
      row = rowIterator.next(); 
      // For each row, iterate through each columns 
      Iterator<Cell> cellIterator = row.cellIterator(); 
      while (cellIterator.hasNext()) 
      { 
        cell = cellIterator.next(); 

        switch (cell.getCellType()) 
        { 
        case Cell.CELL_TYPE_BOOLEAN: 
          data.append(cell.getBooleanCellValue() + ","); 
          break; 

        case Cell.CELL_TYPE_NUMERIC: 
          data.append(cell.getNumericCellValue() + ","); 
          break; 

        case Cell.CELL_TYPE_STRING: 
          data.append(cell.getStringCellValue() + ","); 
          break; 

        case Cell.CELL_TYPE_BLANK: 
          data.append("" + ","); 
          break; 

        default: 
          data.append(cell + ","); 
        } 

        data.append('\n'); 
      } 
    } 

    fos.write(data.toString().getBytes()); 
    fos.close(); 
    } 
    catch (FileNotFoundException e) 
    { 
      e.printStackTrace(); 
    } 
    catch (IOException e) 
    { 
      e.printStackTrace(); 
    } 
    } 

Aber mein Code wird immer in dieser Datei ist fehlgeschlagen,

HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(inputFile)); 

Ich erhalte Fehler Heap-Speicher in der obigen Zeile selbst. Ich bin mir nicht sicher, wie man mit Java Daten aufladen kann. Ich habe sogar Apache POI Jar Code ausprobiert. Aber dieser Code versagt auch.

Kann mir jemand dabei helfen?

+2

Gründe, die Datei in Excel und "Speichern unter" csv nicht zu öffnen? – assylias

+0

@assylias Vielen Dank, dass Sie gerade meine Zeit gespeichert haben – Lokesh

+0

Ist die Datei auf dem Server, der dynamisch aktualisiert wird? – Lokesh

Antwort

0

Der einfachste Weg (vorausgesetzt, der Code arbeitet mit einer kleineren Datei): Erhöhen Sie den von der JVM verwendeten Speicher.

Alternativ können Sie die Datei Zeile für Zeile schreiben:

Path outputFile = Paths.get("C:\output.csv"); 

HSSFWorkbook workbook = new HSSFWorkbook(new FileInputStream(inputFile)); 
HSSFSheet sheet = workbook.getSheetAt(0); 

for (Row row : sheet) { 
    List<String> csv = new StringBuilder(); 
    for (Cell cell : row) { 
    //add the logic with csv.add(cell.getXXXValue()); etc., no comma here 
    } 
    String csvRow = String.join(",", csv) + "\n"; 
    Files.write(outputFile, csvRow.getBytes(UTF_8), StandardOpenOption.APPEND); 
} 
1

Verwenden Apache POI die Excel-Datei importieren und MapDB die Zeilen in einer Disk-basierten File-Datenbank zwischenzuspeichern.

+0

Apache POI funktioniert auch nicht. Dort bekomme ich es auch gescheitert –