ฉากปรากฏขึ้นอีกครั้ง
Apache Poi
ลินเวกซ์
แมตคัต
ดังที่แสดงไว้ข้างต้นในสภาพแวดล้อม Linux+Tomcat จะมีการรายงานข้อผิดพลาดของ "ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว" เมื่อใช้ Apache Poi เพื่อส่งออก Excel
ข้อความแสดงข้อผิดพลาด
java.lang.runtimeException: java.io.ioexception: ไม่มีไฟล์หรือไดเรกทอรีดังกล่าวที่ org.apache.poi.xssf.streaming.sxssfworkbook.createandregistersxssfsheet (sxssfworkbook.java:569) org.apache.poi.xssf.streaming.sxssfworkbook.createsheet (sxssfworkbook.java:558) ที่ com.app.util.excelioutil.write (excelioutil.java:46) ที่ sun.reflect.nativemethodaccessorimpl.invoke0 (วิธีการดั้งเดิม) ที่ sun.reflect.nativemethodaccessorimpl.invoke (nativemethodaccessorimpl.java:39) ที่ sun.reflect.delegatingmethodaccessorimpl.invoke java.lang.reflect.method.invoke (method.java:597) ที่ com.mvc.invoke.actioninvoker.invoke (actioninvoker.java:75) ที่ com.mvc.mvcdispatcher.service com.mvc.mvcfilter.dofilter (mvcfilter.java:67) ที่ org.apache.catalina.core.applicationFilterchain.internaldofilter ที่ org.apache.catalina.core.standardwrappervalve.invoke (Standardwrappervalve.java:222) ที่ org.apache.catalina.core.standardcontextvalve.invoke (StandardContextValve.java:123) ที่ org.apache.catalina.authenticator.authenticatorbase.invoke (Authenticatorbase.java:502) ที่ org.apache.catalina.core.standardhostvalve.invoke org.apache.catalina.valves.errorreportvalve.invoke (errorreportvalve.java:99) ที่ org.apache.catalina.valves.accesslogvalve.invoke (Accesslogvalve.java:953) ที่ org.apache.catalina.core.standardenginevalve.invoke (Standardenginevalve.java:118) ที่ org.apache.catalina.connector.coyoteadapter.service (Coyoteadapter.java:408) ที่ org.apache.coyote.http11.abstracthttp11processor.process (abstracthttp11processor.java:1023) ที่ org.apache.coyote.abstractprotocol $ บทคัดย่อ org.apache.tomcat.util.net.aprendpoint $ socketwithoptionsprocessor.run (aprendpoint.java:1810) ที่ java.util.concurrent.threadpoolexecutor $ คนงาน java.util.concurrent.threadpoolexecutor $ worker.run (threadpoolexecutor.java:908) ที่ java.lang.thread.run (thread.java:662)
สารละลาย
มาพูดคุยเกี่ยวกับวิธีแก้ปัญหาก่อนเพราะการแก้ปัญหานั้นง่ายมากคุณต้องสร้างโฟลเดอร์“ อุณหภูมิ” ในไดเรกทอรีรากของ Tomcat
สาเหตุของข้อผิดพลาด
เหตุผลสำหรับข้อผิดพลาดนี้คือ POI ส่งออก Excel ที่ส่งออกไปยังไดเรกทอรีชั่วคราวของระบบโดยค่าเริ่มต้น ในเวลานั้นโฟลเดอร์ Temp ไม่ได้อยู่ภายใต้ Tomcat of Linux ดังนั้นจึงไม่สามารถพบไดเรกทอรีได้ ในความเป็นจริงไม่ว่าระบบจะมีสภาพแวดล้อมใดตราบใดที่ไดเรกทอรีราก Tomcat ไม่มีอุณหภูมิ เพียงแค่ดูที่ซอร์สโค้ดของ POI ด้านล่างแล้วคุณจะเข้าใจ
โมฆะสาธารณะเขียน (สตรีม outputstream) พ่น IOException {สำหรับ (SXSSFSheet แผ่น: _xFromsxHash.Values ()) {sheet.flushrows (); } // บันทึกไปยังไฟล์ไดเรกทอรีชั่วคราว tmplfile = file.createTempfile ("POI-SXSSF-Template", ".xlsx"); tmplfile.deleteonexit (); fileOutputStream OS = ใหม่ fileOutputStream (TMPLFILE); _wb.write (OS); os.close (); // แทนที่รายการเทมเพลตด้วยไฟล์ข้อมูลแผ่นที่สร้างขึ้น injectData (tmplfile, สตรีม); tmplfile.delete (); - ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น