查看最后部分的内部和外部 - 我不明白它为什么检查null。如果消耗了所有数据,则不会给-1和out给出null?因此,因为-1不为空,所以会关闭。在什么条件下,一个进出不是空的,为什么你想要在它不为空时关闭?
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
public class CopyBytes {
public static void main(String[] args) throws IOException {
FileInputStream in = null;
FileOutputStream out = null;
try {
in = new FileInputStream("xanadu.txt");
out = new FileOutputStream("outagain.txt");
int c;
while ((c = in.read()) != -1) {
out.write(c);
}
} finally {
if (in != null) {
in.close();
}
if (out != null) {
out.close();
}
}
}
}
源: http://docs.oracle.com/javase/tutorial/essential/io/bytestreams.html
答案 0 :(得分:2)
如果尝试对null
值执行方法,则会引发异常。检查null可确保OutputStream已设置并存在,并且不会发生这种情况。
在程序终止之前不关闭流,您也可能丢失缓冲数据。明确管理资源始终是一种好习惯。
答案 1 :(得分:1)
这一点的主要原因是你不想锁定文件,如果它们没有关闭,并且检查它们是否为空的原因是因为如果找不到其中一个文件那么它会如果您试图关闭不存在的内容,则会导致错误。