2017-02-22 15 views
1

アップロードしたスプレッドシートをディスクに保存する必要があります。私は同じコードを使用してファイルを受信すると、Excelからのエラーが壊れています。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(); 
     } 
    } 

私は83KBのサイズのファイルを使用しようとしましたが、結果のファイルは82.5KBです。 ご協力いただければ幸いです。おかげさまで

+0

正しく保存していて、内部のテキストを読み取れないようですか? –

+0

'outStream.flush()'を閉じる前に追加してください。 – Berger

+0

再生できません。ファイルの最後のテストは** **書き込み後に**発生するので、コードではファイルの最後にバイト(-1)を追加するだけです。しかし、決して短いコピーをもたらすべきではありません。上記のコード "D://xlsxTest//sample1.xlsx"が "D:// xlsxTest // BNG Issue.xlsx"よりも短いことを確認できますか? –

答えて

1

Apace POIを使用して、以下のコードでOPCPackageとXSSFWorkbookを使用して.xlsまたは.xlsxファイルをバイト配列に変換してみてください。

ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
    OPCPackage pkg = OPCPackage.open(new File(fullFileName)); 
    XSSFWorkbook wb = new XSSFWorkbook(pkg); 
    wb.write(baos); 
    byte[] fileContent = baos.toByteArray(); 

のApache POIは、バイト配列に変換しながらExcelファイルのすべての情報を抽出するために世話をします。

+0

上記のコードを書くと、問題は解決します。しかし、私は非常に大きなファイルとXSSFWorkbook wb = new XSSFWorkbook(pkg)を取得する可能性があります。メモリ不足の問題が生じる。だから同じものを避けたい。 – Vasantha

+0

excelファイルに数式セルがありますか?循環参照がある場合、または無効な数式がある場合は、StackOverflowエラーが発生します。 –

+0

StackOverflowエラーが発生しません。ファイルは保存されていますが、Excelを開くとファイルが破損していると表示されます。 – Vasantha

関連する問題