bw= new BufferedWriter(fw); //获取jta文本,并用\n分隔符分割文本 String[] s = this .jta.getText().split( "\n" ); for ( int i = 0 ; i < s.length; i++) { bw.write(s[i]); bw.flush(); bw.newLine(); } catch (Exception e) e.printStackTrace( ); // TODO: handle exception finally //这里关闭流要从大到小关闭 //fw.close(); //bw.close(); //这样的顺序就是不行,fw流自己关闭了。然后bw流又把 //fw流关闭一次就会说java.io.IOException: Stream closed bw.close(); fw.close(); } catch (IOException e) // TODO Auto-generated catch block e.printStackTrace();

报错说 如下
那么是因为一个流关闭了但是你有试着使用它就会报这个异常
比如上面例子

bw.close();
fw.close();

bw流使用了fw流,所以关闭bw流也会关闭fw流;
但是下面有使用fw流,相当于使用一个关闭了的流。解决办法是换下位置就好

fw. close (); bw. close (); java . io . IOException : Stream clo sed 是一个常见的 Java 异常,通常发生在尝试对一个已经关闭的输入/输出流(如 Input Stream , Output Stream , Reader, Writer 等)执行读写操作时。这个异常是 Java I/O 框架的一部分,用于指示在 I/O 操作期间发生了某种错误。 spring boot项目,在过滤器、拦截器或自定义aop做统一处理时,获取了request中的input stream 来获取RequestBody里数据,获取之后在Controller里使用@RequestBody注解再获取就报错: Stream clo sed 。这是因为HttpServletRequest中的input stream 是不可重复读的。 这块有个疑问:监听器、过滤器、 拦截器、 AOP的执行顺序是什么呢??? 如果监听器、过滤器、 拦截器、 AOP都存在,则它们的执行顺序为:监听器 => . 在程序执行过程中,如果我们遇见了以下异常: java . io . IOException : Stream clo sed . 即 stream 已经被关闭,我们分析一下就很容易知道原因了,即 stream 已经被关闭。那么最有可能的情况就是你多次关闭了 Stream 。 try { Input Stream is = new xxx(); // other codes is. clo se(); //第一次关闭input Stream } catch( IOException e) { } finally is. clo se() java . io . IOException : UT010029: Stream is clo sed 记录一次项目中的异常,在做下载文件时,文件虽然能够导出来但是系统中却出现了一堆报错信息。 java . io . IOException : UT010029: Stream is clo sed 通过报错信息可以看出这个异常是流被关闭了,在我们学 JAVA 基础时我们知道,使用I/O流时要及时关闭。但是如果关闭的不合理也是有问题的,这个错误是由于这个流被关闭了,而在其他地方又用到了这个流,所以获取不到流就会报错了。 定位到了大 FileInput Stream input Stream = null; try { input Stream = new FileInput Stream ("tst.txt"); } catch (FileNotFoundExcept io n e) { e.printStackTrace(); BufferedInput Stream bufferedInp... 我们使用了ServletOutput Stream 来向客户端发送响应。在finally块中不需要关闭输出流,因为Servlet容器会在请求处理完成后自动关闭输出流。如果在finally块中尝试关闭已关闭的输出流,就会抛出 java . io . IOException : Stream is clo sed 异常。因此,我们可以安全地省略关闭输出流的代码。 ` java . io . IOException : Stream clo sed ` 异常通常发生在尝试对已关闭的输入/输出流(如 `Input Stream `、`Output Stream `、`Reader`、`Writer` 等)执行操作时。一旦流被关闭,任何试图读取或写入该流的操作都会抛出这个异常。 ### 报错原因 1. **流被错误地关闭了**:在代码中可能不小心提前关闭了流,或者在多线程环境中另一个线程关闭了流。 2. **资源管理的错误**:使用 `try-with-resources` 语句时,流会在 SpirngBoot拦截器(Interceptor)和过滤器(Filter)的操作的如下图所示。OOP编程的思路是封装、继承和多态,而AOP编程的思路是不改变原有接口和功能的基础上提供功能扩展。SpringBoot拦截器和过滤器是Spring Boot的一种机制,用于对请求和响应进行操作的拦截,是AOP编程的一种体现。一般来说,AOP编程的实现思路是提供代理,把一些常用功能如权限检查、日志、事务等,从每个业务方法中剥离出来,而提供代理统一实现。该问题的解决思路是:提供一个复制流,让操作基于复制流。