2014-12-10 1 views
1
여기

코드나는 "스레드에서 예외"주 내 XLSX의 다음 CSV로 파일을 변환하려고 할 때 "java.lang.OutOfMemoryError와 : Java 힙 공간"

package com.simplecode.excel; 

import java.io.File; 


import java.io.FileInputStream; 

import java.io.FileOutputStream; 

import java.util.Iterator; 

import org.apache.poi.ss.usermodel.Cell; 

import org.apache.poi.ss.usermodel.Row; 

import org.apache.poi.xssf.usermodel.XSSFSheet; 

import org.apache.poi.xssf.usermodel.XSSFWorkbook; 

public class XlstoCSV { 

    static void xlsx(File inputFile, File outputFile) { 

     // For storing data into CSV files 

     StringBuffer data = new StringBuffer(); 


     try { 
      FileOutputStream fos = new FileOutputStream(outputFile); 

      // Get the workbook object for XLSX file 

      XSSFWorkbook wBook = new XSSFWorkbook(new FileInputStream(inputFile)); 
      // Get first sheet from the workbook 

      XSSFSheet sheet = wBook.getSheetAt(0); 

      Row row; 

      Cell cell; 

      // 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(); 

       data.append("\r\n"); 

       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("\r\n" + ","); 
          break; 

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

        } 
       } 
      } 

      fos.write(data.toString().getBytes()); 

      fos.close(); 


     } catch (Exception ioe) { 

ioe.printStackTrace(); 

     } 
    } 

    //testing the application 


    public static void main(String[] args) { 

     //reading file from desktop 

     File inputFile = new File("C:/Users/1479420/Desktop/Book1.xlsx"); 

     //writing excel data to csv 

     File outputFile = new File("C:/Users/1479420/Desktop/Book.csv"); 

     xlsx(inputFile, outputFile); 
    } 
} 
+0

'data.append' 대신에 내용을 출력하고 끝나는 지 확인하십시오 - 데이터가 너무 커서 StringBuffer를 사용하여 추가 할 수 없다는 것을 의미합니다. 길에 의해 더 권장되는'StringBuilder'). 끝나지 않으면 멈추는 곳에서 인쇄를 볼 수 있습니다. – alfasin

+0

data.append를 제거하면 동일한 행에 인쇄됩니다 –

+0

답변을 얻었으므로'StringBuffer'를 사용하고있어 실패했습니다 – alfasin

답변

1

사용의 BufferedWriter가 FileOutputStream에 대신입니다 데이터 쓰기 직접 BufferedWriter에 StringBuffer를 사용하지 말아주세요

관련 문제