Die Szene taucht wieder auf
Apache Poi
Linux
Kater
Wie oben gezeigt, wird in der Umgebung von Linux+Tomcat ein Fehler von "keine solche Datei oder Verzeichnis" angegeben, wenn Apache POI zum Exportieren von Excel verwendet wird.
Fehlermeldung
java.lang.runtimeexception: java.io.ioException: Keine solche Datei oder Verzeichnis unter org.apache.poi.xssf.streaming.sxssfworkbook.createandregistersXSSFSHETET org.apache.poi.xssf.streaming.sxssfworkbook.createSheet (sxssfworkbook.java:558) unter com.app.util.excelioutil.write (excelioutil.java:46) unter com.app.controllers.drivingSchoolcontroller.download (DrivingSchoolController.java:106) at sun.reflect.nativemethodaccessorimpl.invoke0 (native Methode) bei sun.reflect.nativemethodaccessorimpl.invoke (nativemethoccessorimpul.invoke (nativemethactocact.inimple sun.reflect.delegatingMethodaccessorimpl.invoke (delegatingMethodaccessorimpl.java:25) bei Java.lang.reflect.method.invoke (method.java:597) at com.mvc.invoke.actioninvoker.invoke (actionInvoker.javoke com.mvc.mvcdispatcher.service (mvcdispatcher.java:119) unter com.mvc.mvcFilter.dofilter (mvcFilter.java:67) bei org.apache.catalina.core.ApplicationFilterchain.internaldaNdoNDofilter (Application.internArdain.InternalDaNdofilter (Application). org.apache.catalina.core.applicationFilterchain.dofilter (applicationFilterchain.java:210) at org.apache.catalina.core.StandardWrapperValve.invoke (Standardwrappervalve.java:222) unter atemberaubendem (Standardwrappervalve.java:222) unter der org.apache.catalina.core.standardcontextvalve.invoke (StandardContextValve.java:123) at org.apache.catalina.authenticator.AuthenticatorBase.invoke (authenticatorbase.java:502) unter unteren org.apache.catalina.core.standardHostvalve.invoke (StandardHostvalve.java:171) at org.apache.catalina.valves.Erorportvalve.invoke (ErrorRorportvalve.java:99) bei org.apache.catalina.valves.accesslogvalve.invoke (AccessLogvalve.java:953) at org.apache.catalina.core.Standardenginevalve.Invoke (Standardginevalve.java:118) bei org.apache.catalina.connector.coyoteadapter.service (coyooteadapter.java:408) at org.apache.coyote.http11.abstracthttp11Processor.Process (Abstracthttp11processor.java:1023) ATROCESS) org.apache.coyote.abstractProtocol $ concractConnectionHandler.process (AbstractProtocol.java:589) unter org.apache.tomcat.util.net.aprendpoint $ socketwithOptionSor.run (aprendpoint.java:1810) ATER java.util.concurrent.threadpoolexecutor $ Worker.runtask (threadpoolexecutor.java:886) bei java.util.concurrent.threadpoolexecutor $ Worker.
Lösung
Lassen Sie uns zuerst über die Lösung sprechen, da die Lösung sehr einfach ist und Sie nur im Stammverzeichnis von Tomcat einen "Temperatur" -Fordner erstellen müssen.
Fehlerursache
Der Grund für diesen Fehler ist, dass POI den exportierten Excel in das temporäre Verzeichnis des Systems standardmäßig exportiert. Zu diesem Zeitpunkt existierte der TEMP -Ordner nicht unter dem Tomcat von Linux, sodass das Verzeichnis nicht gefunden werden kann. Tatsächlich, egal in welcher Systemumgebung es sich befindet, solange das Tomcat -Root -Verzeichnis keine Temperatur hat. Schauen Sie sich einfach den Quellcode des POI unten an und Sie werden es verstehen.
public void write (outputStream stream) löscht IoException {für (sxssfsheet Blatt: _xfromsxhash.Values ()) {Sheet.Flushrows (); } // in der temporären Verzeichnisdatei speichern tmplFile = file.createTempile ("poi-sxssf-template", ".xlsx"); tmplFile.deleteonexit (); FileOutputStream OS = new FileOutputStream (TMPLFILE); _wb.write (OS); os.close (); // Ersetzen Sie die Vorlageneinträge durch die generierten Blattdatendateien InjectData (TMPLFILE, Stream); tmplFile.delete (); } Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.