As variáveis criadas dentro de um bloco, existem apenas dentro deste bloco. É o caso de os, que está sendo criado no bloco do try.
publicstaticvoidmain(String[]args){BoxmyBox=newBox();ObjectOutputStreamos=null;//Agora "os" existirá em qualquer parte do método maintry{FileOutputStreamfs=newFileOutputStream("foo.ser");os=newObjectOutputStream(fs);os.writeObject(myBox);}catch(Exceptionex){ex.printStackTrace();}finally{if(os!=null)try{os.close();}catch(IOExceptionex){}}}
C
cake
Então como faz?
Eric_Yuzo
Um post acima tem o exemplo.
C
cake
Ops! Malz! :XD:
Vlw! =]
C
cake
Ainda tá dando erro… :?
Eric_Yuzo
O os.close() deve estar em um bloco try/catch, pois ele declara IOException. Copiei e colei o código e acabei nem percebendo.
finally {
if (os != null)
try { os.close(); }
catch (IOException ex) { }
}
Edit: Arrumei o exemplo lá em cima também.
C
cake
Então se a Exception for lançada no construtor do ObjectOutputStream, FileOutputStream ficará aberto?
Eric_Yuzo
Imagino que sim. Do jeito que está, quem chama o close de fs é o método close de os. Por isso não custa nada fechar tudo na mão mesmo.