2017-02-22 2 views
1

Ich habe eine Anforderung, die hochgeladene Kalkulationstabelle auf der Festplatte zu speichern. Ich benutze den folgenden Code, um das gleiche zu tun und die Datei ist beschädigt Fehler von der Excel.Speichern einer Tabelle auf der Festplatte mit Java

byte[] bytes = null; 
    File uploadedFile = new File("D://xlsxTest//BNG Issue.xlsx"); 
    File file = new File("D://xlsxTest//sample1.xlsx"); 

    FileOutputStream outStream = null; 

    InputStream inputStream = null; 

    try{ 
    if(!file.exists()){ 
     file.createNewFile(); 
    } 
    outStream = new FileOutputStream(file); 

    if (uploadedFile != null) { 

     ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); 
     inputStream = new FileInputStream(uploadedFile);; 

     int c = 0; 
     while (c != -1) { 
      c = inputStream.read(); 
      byteArrayOutputStream.write((char) c); 

     } 
     bytes = byteArrayOutputStream.toByteArray(); 

    } 

    outStream.write(bytes); 
      }catch(Exception e){ 
     e.printStackTrace(); 
    }finally{ 
     try{ 
     outStream.close(); 

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

Ich versuchte mit einer Datei von 83 KB Größe und die resultierende Datei ist 82,5 KB. Jede Hilfe wäre willkommen. Danke.

+0

Sieht aus wie Sie es richtig speichern und den Text nicht lesen können? –

+0

Versuchen Sie, outStream.flush() 'hinzuzufügen, bevor Sie es schließen. – Berger

+0

Kann nicht reproduziert werden. Ihr Code fügt einfach ein zusätzliches Byte (-1) am Ende der Datei hinzu, da der Test für das Dateiende ** nach dem Schreiben stattfindet. Aber es sollte nie zu einer kürzeren Kopie führen. Können Sie bestätigen, dass der obige Code "D: //xlsxTest//sample1.xlsx" kürzer als "D: // xlsxTest // BNG Issue.xlsx" ist? –

Antwort

1

Probieren Sie die Verwendung von POI, konvertieren .xls oder .xlsx Datei in Byte-Array mit OPCPackage und XSSFWorkbook mit unten Code.

Apache POI kümmert sich darum, alle Informationen der Excel-Datei während der Konvertierung in Byte-Array zu extrahieren.

+0

Das Problem ist gelöst, wenn ich den obigen Code schreibe. Aber ich habe vielleicht die Möglichkeit, eine sehr große Datei und XSSFWorkbook wb = new XSSFWorkbook (pkg) zu bekommen; führt zu Problemen, die außerhalb des Gedächtnisses liegen. Also wollte das selbe vermeiden. – Vasantha

+0

Gibt es eine Formel Zellen in der Excel-Datei? Wenn eine zyklische Referenz vorhanden ist oder wenn ungültige Formeln vorhanden sind, erhalten Sie den StackOverflow-Fehler. –

+0

Ich bekomme keinen StackOverflow-Fehler. Die Datei wird gespeichert, aber beim Öffnen von Excel wird angezeigt, dass die Datei beschädigt ist. – Vasantha

Verwandte Themen