java ,返回流,IOException: Stream Closed,TryWithResource
Posted 二十六画生的博客
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java ,返回流,IOException: Stream Closed,TryWithResource相关的知识,希望对你有一定的参考价值。
Java 1.7中新增的try-with-resource语法糖来打开资源,而无需码农们自己书写资源来关闭代码
为了能够配合try-with-resource,资源必须实现AutoClosable
接口。该接口的实现类需要重写close
方法:
public class ConnectionClone implements AutoCloseable
public void sendData()
System.out.println("正在发送数据");
@Override
public void close() throws Exception
System.out.println("正在关闭连接");
public static void main(String[] args)
try (ConnectionClone conn = new ConnectionClone())
conn.sendData();
catch (Exception e)
e.printStackTrace();
输出:
正在发送数据
正在关闭连接
public static void main(String[] args)
InputStream is = new TryWithResource().f1();
byte[] data = new byte[1024];
try
is.read(data);
catch (IOException e)
e.printStackTrace();
System.out.println("文件内容:" + new String(data));
public InputStream f1()
File file = new File("D:\\\\00t1.txt");
try (InputStream is = new FileInputStream(file))
return is;
catch (IOException e)
e.printStackTrace();
return null;
java.io.IOException: Stream Closed
at java.io.FileInputStream.readBytes(Native Method)
at java.io.FileInputStream.read(FileInputStream.java:233)
原因:不要把InputStream当作返回类型,同一个流对象又要返回又要close是矛盾的!!!可以使用void,byte[],或者String
public static void main(String[] args) // 指定构造文件
File file = new File("D:\\\\00t1.txt"); // 将文件构建为输入流
try (InputStream is = new FileInputStream(file)) // 创建字节数组
byte[] data = new byte[1024]; // 从文件流中读取数据,存储到缓冲字节数组
is.read(data); // 输出文件内容
System.out.println("文件内容:" + new String(data));
catch (IOException e)
e.printStackTrace();
能正确读取。
关于异常:
public class ConnectionClone implements AutoCloseable
/* public void sendData()
System.out.println("正在发送数据");
@Override
public void close() throws Exception
System.out.println("正在关闭连接");
*/
public void sendData() throws Exception //方法内抛出了一个异常,那么在这个方法内,需要catch处理或者继续向上抛出异常
throw new Exception("send data");
@Override
public void close() throws Exception
throw new Exception("close");
public static void main(String[] args)
try (ConnectionClone conn = new ConnectionClone())
conn.sendData();
catch (Exception e)
e.printStackTrace();
输出:
java.lang.Exception: send data
at testpackage.ConnectionClone.sendData(ConnectionClone.java:20)
at testpackage.TryWithResource.main(TryWithResource.java:17)
Suppressed: java.lang.Exception: close
at testpackage.ConnectionClone.close(ConnectionClone.java:25)
at testpackage.TryWithResource.main(TryWithResource.java:18)
从Java 1.7开始,大佬们为Throwable
类新增了addSuppressed
方法,支持将一个异常附加到另一个异常身上,从而避免异常屏蔽。
参考《深入理解 Java try-with-resource 语法糖》
https://juejin.im/entry/57f73e81bf22ec00647dacd0
以上是关于java ,返回流,IOException: Stream Closed,TryWithResource的主要内容,如果未能解决你的问题,请参考以下文章
JAVA之旅(二十四)——I/O流,字符流,FileWriter,IOException,文件续写,FileReader,小练习
抛出 java.io.IOException: 当我尝试从服务器下载 txt 文件时,http:/ 上的流意外结束
j2me:打开流时出错 - “java.io.IOException:-7334”
坑爹微信之读取PKCS12流时出现的java.io.IOException: DerInputStream.getLength