日期:2014-05-18  浏览次数:20696 次

问一个关于更新文件的问题!!!急
我把一个文件的内容,通过流操作追加到另一个文件里,如果这个文件有1`.45M,页面就会显示如下信息:
javax.servlet.ServletException:   サーブレットの実行により例外を投げました
at   org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:220)
at   org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:144)
at   org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:209)
at   org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:595)
at   org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:432)
at   org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:954)
at   org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:138)
at   org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:595)
at   org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:432)
at   org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:954)
at   org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2459)
at   org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:132)
at   org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:595)
at   org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:118)
at   org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:593)
at   org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:116)
at   org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:593)
at   org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:432)
at   org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:954)
at   org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:126)
at   org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:595)
at   org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:432)
at   org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:954)
at   org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:152)
at   org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
at   org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
at   org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
at   org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
at   org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at   java.lang.Thread.run(Thread.java:534)


root   cause  

java.lang.OutOfMemoryError

请问,难道上传的文件稍微大点,就会发生这种情况??如何解决,我现在已经将FileUpload的setMaxSize设置为2*1024*1024了,难道还要设小点??

------解决方案--------------------
你不要一次就把文件都读入到内存中,读一点到内存中,然后再写入到输出流中,如此循环到结束,自然不会报OutOfMemoryError