Java 文件写入时的错误处理

Java 文件写入时的错误处理,java,spring,file,spring-mvc,response,Java,Spring,File,Spring Mvc,Response,我将文件写入Spring控制器中的OutputStream(从响应中获取)。文件很大,我以4KB的循环写入。当全部完成时,在最后一个块中,我刷新并关闭输出流。如果一切顺利,那就好了 但如果在写入文件的过程中出现错误,如何向用户显示错误 在catch块中,我尝试转发到errorjsp,重定向到error.jsp,到html页面,或者像这样再次在OutputStream中写入 outputstream.write(“…发生错误…”。getBytes()) 但它总是显示已经获得的OutputStrea

我将文件写入Spring控制器中的OutputStream(从响应中获取)。文件很大,我以4KB的循环写入。当全部完成时,在最后一个块中,我刷新并关闭输出流。如果一切顺利,那就好了

但如果在写入文件的过程中出现错误,如何向用户显示错误

在catch块中,我尝试转发到errorjsp,重定向到
error.jsp
,到html页面,或者像这样再次在OutputStream中写入

outputstream.write(“…发生错误…”。getBytes())


但它总是显示已经获得的OutputStream,或者prev页面停留在客户端,并且无法显示错误。在这种情况下如何处理错误?

您是否查看了
@ControllerAdvice
?假设您所做的是在注释为
@Controller
@RestController
的内容中进行的。在这种情况下,您只需拥有一个适合处理任何错误的
@ControllerAdvice
(以及相应的
@ExceptionHandler
)。我现在正在尝试。Obe想问的是,如果我使用上面的方法,即使rep已经编写好了,它仍然可以工作?请您澄清一下,或者发布一些示例代码,以便对您提供更多帮助?我必须为输出流编写一个文件,并发送一个cookie,用于不同的目的。浏览器希望此cookie用于其他操作。我无法将cookie设置为与编写文件时相同的响应。所以我用MutableResponse包装了响应。从原始响应中获取outputstream(out1)并保留它。在下一个方法中,从mutableresponse中,再次获取outputstream(out2),将contenttype设置为内联附件application/pdf,在固定缓冲区大小的循环中写入文件,最后进行块刷新并关闭out2。在原始方法中,从写入的mutableresponse中获取内容,将其设置为out1,将cookie添加到out1,然后关闭out1。然后返回null modelandview。因此,文件和cookie将到达客户端。若在添加cookie时出现意外错误,它将转到catch块。在这里,我将modelandview返回到我的错误jsp。在这里,它表示outputstream已经获得,jsp无法处理它,因此打印出堆栈跟踪,这是我不想要的。我想在jsp中显示一行常规错误。抱歉,无法编写代码,因为它不允许格式化。