2011-09-14 9 views
8

निम्नलिखित दस्तावेज़ का उपयोग करना:अपाचे पीओआई - एसएक्सएसएसएफ: फाइल को आउटपुट से पहले खिड़की में नहीं चलती है?

SXSSF: http://poi.apache.org/spreadsheet/how-to.html#sxssf

इस साइट के अनुसार (पैकेज: org.apache.poi.xssf.streaming) XSSF का एक एपीआई संगत स्ट्रीमिंग का विस्तार किया जाना है तो जब बहुत बड़ी स्प्रेडशीट का उत्पादन किया जाना चाहिए, और ढेर अंतरिक्ष सीमित है। एसएक्सएसएसएफ स्लाइडिंग विंडो के भीतर मौजूद पंक्तियों तक पहुंच सीमित करके इसकी कम मेमोरी पदचिह्न प्राप्त करता है, जबकि एक्सएसएसएफ दस्तावेज़ में सभी पंक्तियों तक पहुंच प्रदान करता है। पुरानी पंक्तियां जो खिड़की में नहीं हैं, वे पहुंच में नहीं आती हैं, क्योंकि वे डिस्क पर लिखी जाती हैं।

हालांकि, प्रदान किए गए उदाहरण में कार्यपुस्तिका फ़ाइल फ़ाइल को फ़ाइल लिखने के पहले फ़ाइल स्थान देने से पहले फ्लश होता है।

public static void main(String[] args) throws Throwable { 
    Workbook wb = new SXSSFWorkbook(100); // keep 100 rows in memory, exceeding rows will be flushed to disk 
    Sheet sh = wb.createSheet(); 
    for(int rownum = 0; rownum < 1000; rownum++){ 
     Row row = sh.createRow(rownum); 
     for(int cellnum = 0; cellnum < 10; cellnum++){ 
      Cell cell = row.createCell(cellnum); 
      String address = new CellReference(cell).formatAsString(); 
      cell.setCellValue(address); 
     } 

    } 

    // Rows with rownum < 900 are flushed and not accessible 
    for(int rownum = 0; rownum < 900; rownum++){ 
     Assert.assertNull(sh.getRow(rownum)); 
    } 

    // ther last 100 rows are still in memory 
    for(int rownum = 900; rownum < 1000; rownum++){ 
     Assert.assertNotNull(sh.getRow(rownum)); 
    } 

    FileOutputStream out = new FileOutputStream("/temp/sxssf.xlsx"); 
    wb.write(out); 
    out.close(); 
} 

तो यह सवाल पूछता है, जहां फ़ाइल सिस्टम पर यह डेटा संग्रहीत कर रहा है? क्या यह सिर्फ डिफ़ॉल्ट temp निर्देशिका में एक temp फ़ाइल बना रहा है? क्या यह सभी/सबसे अधिक कार्यान्वयन के लिए सुरक्षित है?

धन्यवाद

उत्तर

9

वर्ग करता है बफरिंग है SheetDataWriterorg.apache.poi.xssf.streaming.SXSSFSheet में

जादू लाइन आप शायद में रुचि रखते हैं है:

_fd = File.createTempFile("poi-sxxsf-sheet", ".xml"); 

के संदर्भ में, कि सुरक्षित है शायद, लेकिन निश्चित रूप से नहीं ... यह पोई बगजिला में एक बग खोलने की संभावना है, और इसे org.apache.poi.util.TempFile का उपयोग करने के लिए स्विच करने का अनुरोध किया गया है जो थोड़ा अधिक नियंत्रण की अनुमति देता है। सामान्य रूप से, जब तक आप java.io.tmpdir (या डिफ़ॉल्ट आपके लिए समझदार है) के लिए एक वैध संपत्ति निर्दिष्ट करते हैं, तो आपको ठीक होना चाहिए

+0

बढ़िया! धन्यवाद .. –

+0

आपके उत्तर के लिए धन्यवाद। जब अस्थायी फ़ाइल हटा दी जाती है? क्या यह प्रोग्राम समाप्ति में हटा दिया जाएगा? हम इसे मैन्युअल रूप से कैसे हटा सकते हैं? – user2625094

+0

कक्षा SXSSFWorkbook निपटान() - डिस्क पर इस कार्यपुस्तिका का समर्थन करने वाली अस्थायी फ़ाइलों का निपटान करें। –

संबंधित मुद्दे