يعود المشهد إلى الظهور
أباتشي بوي
Linux
هر
كما هو موضح أعلاه ، في بيئة Linux+Tomcat ، سيتم الإبلاغ عن خطأ في "عدم وجود ملف أو دليل" عند استخدام Apache POI لتصدير Excel.
رسالة الخطأ
java.lang.runtimeexception: java.io.ioException: لا يوجد مثل هذا الملف أو الدليل في org.apache.poi.xssf.streaming.sxssfworkbook.createandregistersxssseet (sxssfworkbook.java:569) على org.apache.poi.xssf.streaming.sxssfworkbook.createsheet (sxssfworkbook.java:558) في com.app.util.excelioutil.write (excelioutil.java:46) في com.app.controllers.drivingschoolcontroller. في Sun.Reflect.NativeMethodAccessorImpl.Invoke0 (الطريقة الأصلية) في Sun.Reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.Java:39) في Sun.Reflect.DelegatingMetacsorcorimpl.invoke java.lang.reflect.method.invoke (method.java:597) في com.mvc.invoke.actioninvoker.invoke (ActionInvoker.java:75) في com.mvc.mvcdispatcher.service (mvcdispatcher.java:119) com.mvc.mvcfilter.dofilter (mvcfilter.java:67) at org.apache.catalina.core.applicationfilterchain.internaldofilter (ApplicationFilterchain.java:243) at org.apache.catalina.core.applicationfilterchain.dofilter (ApplicationFilterchain.java:210) at org.apache.catalina.core.standardwrappervalve.invoke (standardwrappervalve.java:222) at org.apache.catalina.core.standardContextValve.invoke (StandardContextValve.java:123) at org.apache.catalina.authenticator.authenticatorbase.invoke (AustraliticatorBase.java:502) at org.apache.catalina.core.standardhostvalve.invoke (standardhostvalve.java:171) at org.apache.catalina.valves.errorerportvalve.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) at org.apache.coyote.http11.abstracthttp11process org.apache.coyote.abstractprotocol $ ussstractConnectionHandler.Process (AbstractProtocol.java:589) at org.apache.tomcat.util.net.aprendpoint $ socketwithoptionsprocessor.run (aprendpoint.java:1810) at java.util.concurrent.threadpoolexecutor $ worker.runtask (threadpoolexecutor.java:886) at java.util.concurrent.threadpoolexecutor $ worker.run (threadpoolexecutor.java:908) at java.lang.run.
حل
دعنا نتحدث عن الحل أولاً ، لأن الحل بسيط للغاية ، فأنت بحاجة فقط إلى إنشاء مجلد "مؤقت" في الدليل الجذر لـ Tomcat.
سبب الخطأ
سبب هذا الخطأ هو أن POI تصدر التفوق المصدر إلى الدليل المؤقت للنظام بشكل افتراضي. في ذلك الوقت ، لم يكن المجلد المؤقت موجودًا تحت tomcat من Linux ، لذلك لا يمكن العثور على الدليل. في الواقع ، بغض النظر عن بيئة النظام الموجودة ، طالما أن دليل الجذر Tomcat ليس له درجة حرارة. فقط انظر إلى الكود المصدري لـ POI أدناه وسوف تفهمه.
public void write (outputstream tream) يلقي ioException {for (sxssfsheet sheet: _xfromsxhash.values ()) {sheet.flushrows () ؛ }. tmplfile.deleteOnexit () ؛ fileOutputStream OS = جديد fileOutputStream (tmplfile) ؛ _wb.write (OS) ؛ OS.Close () ؛ // استبدل إدخالات القالب بملفات بيانات الألواح التي تم إنشاؤها عن طريق الحقن (tmplfile ، دفق) ؛ tmplfile.delete () ؛ } ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.