A cena reaparece
Apache poi
Linux
Tomcat
Como mostrado acima, no ambiente Linux+Tomcat, um erro de "nenhum arquivo ou diretório" será relatado ao usar o Apache Poi para exportar o Excel.
mensagem de erro
java.lang.RuntimeException: java.io.ioException: nenhum arquivo ou diretório em org.apache.poi.xssf.streaming.sxsfworkbook.createAndregistersxssfsheet (sxsfworkbook.java:569) at org.apache.poi.xssf.streaming.sxssfworkbook.createsheet (sxssfworkbook.java:558) em com.app.util.excelioutil.wrivingsChoLOnTroll.Java:46) at com.app.CrollOlOlOlOlOlOlOlOnCrlerT.TrollOntroller.java:46) at.App.CrollOlOlOlOlOlOlOnClOntROLTROLTROLR.Java:46) at.ap.AptCoLoLOLOLOLOLOLOLOLOLTROLR. at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.method.invoke (métod.java:597) em com.mvc.invoke.actionInvoker.invoke (actionInvoker.java:75) em com.mvc.mvcdispatcher.service (mvcdispatcher.java:119) com.mvc.mvcfilter.dofilter (mvcfilter.java:67) em org.apache.catalina.core.applicationfilterchain.internalDofilter (ApplicationFilterchain.java:243) em org.apache.catalina.core.applicationfilterchain.dofilter (ApplicationFilterchain.java:210) em org.apache.catalina.core.standardwrapperalve.invoke (standardwraperalve.java:222) AT org.apache.catalina.core.standardContextValve.invoke (StandardContextValve.java:123) em org.apache.catalina.authenticator.authenticatorbase.invoke (autenticatorBase.java:502) AT org.apache.catalina.core.standardhostvalve.invoke (StandardHostValve.java:171) em org.apache.catalina.valves.errorReportValve.invoke (errorReportValve.java:99) em org.apache.catalina.valves.accessLogValve.invoke (accessLogVValve.java:953) em org.apache.catalina.core.standardengineValVe.invoke (standardengineValve.java:118) em org.apache.catalina.connector.coyoteadapter.service (coyoteadapter.java:408) em org.apache.coyote.http11.abstracthttp11processor.process (abstractttp11processor.java:1023) org.apache.coyote.abstractprotocol $ abstrateConnectionHandler.process (abstrateprotocol.java:589) em org.apache.tomcat.util.net.aprendpoint $ socketwithptionsprocessor.run (abrendpoint.java:1810) java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:662)
Solução
Vamos falar sobre a solução primeiro, porque a solução é muito simples, você só precisa criar uma pasta "temp" no diretório raiz do tomcat.
Causa de erro
O motivo desse erro é que o POI exporta o Excel exportado para o diretório temporário do sistema por padrão. Naquela época, a pasta temp não existia sob o tomcat do Linux, portanto o diretório não pode ser encontrado. De fato, não importa em que ambiente do sistema ele esteja, desde que o diretório raiz do Tomcat não tenha temperatura. Basta olhar para o código -fonte do POI abaixo e você entenderá.
public void write (fluxo de saída de saída) lança ioexception {for (folha sxssfsheet: _xfromsxhash.values ()) {sheet.flushrows (); } // Salvar no arquivo de diretório temporário tmplfile = file.createTeTempFile ("poi-sxssf-template", ".xlsx"); tmplfile.DeleteOnexit (); FileOutputStream OS = new FileOutputStream (tmplfile); _wb.Write (OS); os.close (); // Substitua as entradas do modelo com os arquivos de dados da folha gerados injetData (tmplfile, stream); tmplfile.Delete (); } O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.