java中io流,不为null时关闭,但是我老感觉如果是读了一半时也是不为空啊,怎么解释

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中io流,不为null时关闭,但是我老感觉如果是读了一半时也是不为空啊,怎么解释相关的知识,希望对你有一定的参考价值。

try
//read & write
catch(XXXException e)
//异常处理
finally
if(io != null)
io.close();



一般将关闭连接,关闭io等操作放在finally,确保一定会被执行。

至于你说不为null时关闭,这个是因为,当io==null时,执行io.close()会发生空指针异常。

只有io!=null,才能执行io.close()操作。

同样,平时用于判断一个对象是否为空也是需要先判断对象是否为null
如:if(str != null && str.trim().length > 0)//do something..
参考技术A 读了一半,那会报异常啊,流关闭可以放在finally里,就是不管发不发生异常都关闭流 参考技术B 1.7 可以使用 try 结构自动关闭了。

调用构造方法抛出异常时,才会是 null吧。
参考技术C 优秀例子:
try
//read & write
io.close();
catch(XXXException e)
//异常处理
finally
if(io != null)
io.close();

io=null;

java中IO流操作怎样关闭流

我说的意思是当关闭流时一般都先判断是否为空,如果不为空才进行关闭,例如if(in!=null)tryin.close();catch(IOExection e);此处的in代表输入流。那么当in=null时是什么意思?

如果 in == null,就说明 in这个引用所指向的对象还没有被创建,自然 in.close()也就不可能被执行,而且会报异常。我是这样想的,程序中 如果你先声明变量
InputStream(或者其他流类型) in = null;
然后执行其他语句,再 in = new 、、、、
在in new之前其他语句出exception,这时流没有被打开,也就无需关闭,如果不判断if(null != in) 硬要关闭in就出exception

另外你的代码按如下写会更合理:

if(null != in)
try
in.flush();
in.close();
in = null;

catch(IOExection e);
参考技术A 如果 in == null,就说明 in这个引用所指向的对象还没有被创建,自然 in.close()也就不可能被执行,而且会报异常。我是这样想的,程序中 如果你先声明变量
InputStream(或者其他流类型) in = null;
然后执行其他语句,再 in = new 、、、、
在in new之前其他语句出exception,这时流没有被打开,也就无需关闭,如果不判断if(null != in) 硬要关闭in就出exception

另外你的代码按如下写会更合理:

if(null != in)
try
in.flush();
in.close();
in = null;

catch(IOExection e);
参考技术B in=null时的意思就是说流还没有被初始化时就报异常了,此时流为空值。对于空值的流是不能关闭的,否则会出空指针异常。所以之前要判断一下。 参考技术C 调用流的close();方法关闭 参考技术D 有 相关方法关闭 如:FileOutputStream out = new FileOutputStream
操作完成后 out.close

以上是关于java中io流,不为null时关闭,但是我老感觉如果是读了一半时也是不为空啊,怎么解释的主要内容,如果未能解决你的问题,请参考以下文章

java;怎么关闭流文件?

java--io流关闭工具类

关于java中io流的关闭问题,部分代码,这种情况用不用关闭new FileReader(file)?

IO流bufferedReader中 if(br!=null) br.close();啥意思? 不是等于空流结束了才关闭流吗?

Java IO流中先关闭输出流还是先关闭输入流?为啥?

Java IO流中先关闭输出流还是先关闭输入流?为什么?