La escena reaparece
Apache poi
Linux
Gato
Como se muestra arriba, en el entorno Linux+TomCat, se informará un error de "no hay archivo o directorio" cuando se use Apache POI para exportar Excel.
mensaje de error
java.lang.runtimeexception: java.io.ioException: no hay dicho archivo o directorio en org.apache.poi.xssf.streaming.sxssfworkbook.createanDregistersxssfsheet (sxssfworkbook.Java:569) AT org.apache.poi.xssf.streaming.sxssfworkbook.createSheet (sxssfworkbook.java:558) en com.app.util.excelioutil.write (Excelioutil.Java:46) en Comm.App.Controllers.DrivingsController.download (DrivRivingsChoolerCheoler. en Sun.reflect.nativemethodaccessorImpl.invoke0 (método nativo) en Sun.reflect.nativemethodaccessorPl.invoke (nativemethodaccessorImpl.java:39) en Sun.reflect.DelegatingMethodaccessImpl.invoke (delegando MethodaccessorsorsorsorsorsopessageSeMpl.Jave java.lang.reflect.method.invoke (método.java:597) en com.mvc.invoke.actionInvoker.invoke (ActionInvoker.Java:75) en com.mvc.mvcdispatcher.service (mvcdispatcher.java:119) AT com.mvc.mvcfilter.dofilter (mvcfilter.java:67) en org.apache.catalina.core.applicationfilterchain.internaldofilter (applicationFilterchain.java:243) en org.apache.catalina.core.applicationfilterchain.dofilter (applicationFilterchain.java:210) en org.apache.catalina.core.standardwrapppervalve.invoke (Standardwrappervalve.java:222) a org.apache.catalina.core.standardcontextvalve.invoke (StandardContextValve.java:123) en org.apache.catalina.authenticator.authenticatorbase.invoke (autenticatorBase.Java:502) en org.apache.catalina.core.standardhostvalve.invoke (StandardHostValve.Java:171) en org.apache.catalina.valves.errorreportvalve.invoke (Errorreportvalve.Java:99) a org.apache.catalina.valves.accesslogvalve.invoke (accesslogvalve.java:953) en org.apache.catalina.core.standardenginevalve.invoke (StandardengineValve.Java:118) a org.apache.catalina.connector.coyoteadapter.service (Coyoteadapter.java:408) en org.apache.coyote.http11.abstractthttp11processor.process (Abstracthttp11processor.Java:1023) AT org.apache.coyote.abstractProtocol $ abstractConnectionHandler.process (abstractProtocol.java:589) en org.apache.tomcat.util.net.aprendpoint $ socketwithoPtionsProcessor.run (apenPoint.Java:1810) en java.util.concurrent.threadpoolexecutor $ trabajador.Runtask (ThreadPoolExecutor.java:886) en java.util.concurrent.threadpoolexecutor $ trabajador.run (threadpooleCutor.Java:908) en java.lang.thread.run (Thread.Java:62)
Solución
Hablemos primero sobre la solución, porque la solución es muy simple, solo necesita crear una carpeta de "temperatura" en el directorio raíz de Tomcat.
Causa de error
La razón de este error es que POI exporta el Excel exportado al directorio temporal del sistema de forma predeterminada. En ese momento, la carpeta TEMP no existía debajo del Tomcat de Linux, por lo que no se puede encontrar el directorio. De hecho, no importa en qué entorno del sistema se encuentre, siempre y cuando el directorio de la raíz Tomcat no tenga temperatura. Solo mire el código fuente del POI a continuación y lo comprenderá.
Public void Write (OutputStream Stream) lanza ioexception {para (sxssfsheet hoja: _xFromsxhash.values ()) {sheet.flushrows (); } // Guardar en el archivo de directorio temporal tmplfile = file.createTempfile ("poi-sxssf-plplate", ".xlsx"); tmplfile.deleteonexit (); FileOutputStream OS = nuevo FileOutputStream (TMPLFile); _WB.Write (OS); os.close (); // Sustituya las entradas de plantilla con los archivos de datos de hoja generados inyectData (TMPLFile, Stream); tmplfile.delete (); } Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.