Bom galera é a minha primeira participação aqui no forum,
trabalho como programador Delphi e estou começando aprender java.
criei um código para manipulação de arquivo txt e gostaria da opnião de vocês se estou fazedo da maneira correta, em fim, todas as sugestões seram bem vindas.
Por q assim mesmo q haja algum erro o finally sempre será executado e os objetos de IO serão fechados sempre.
Fabiano_G_s
valeu amigo eduveks
já modifiquei meu código
um abraço!!!
T
thingol
Só para ser chato.
O jeito correto de fechar streams, writers e readers é mais fácil (e se você der uma olhada no código do Eduveks vai ver que ele vai deixar coisas abertas se houver problema ao fechar alguma coisa) é assim:
Se um Stream, Reader ou Writer encapsula outro Stream, Reader ou Writer, você só precisa fechar o mais externo (como eu fiz acima), já que o método close chama o close do stream, reader ou writer encapsulado.
Não é preciso, e aliás está errado, ficar fechando tudo.
eduveks
thingol:
e se você der uma olhada no código do Eduveks vai ver que ele vai deixar coisas abertas se houver problema ao fechar alguma coisa
por q? :shock:
o finally com os ifs e os closes não chega? Em q situação pode não fazer o close de algum daquele jeito?
ok… fechar só os mais externos é mais fácil, só q nunca tive a certeza absoluta disto por isso jogava mais pelo seguro
S
Ssalgado
Acho que ele quiz dizer que caso o código abaixo lance a exception, as outras linhas não vão ser executadas, e possivelmente fechadas:
if (r != null) {
try {
r.close();
} catch (Exception e) {
throw new Error(e);
}
}
renatocustodio
/
||
||
||
Faz sentido.
fabianogoes
thingol:
Só para ser chato.
O jeito correto de fechar streams, writers e readers é mais fácil (e se você der uma olhada no código do Eduveks vai ver que ele vai deixar coisas abertas se houver problema ao fechar alguma coisa) é assim:
Se um Stream, Reader ou Writer encapsula outro Stream, Reader ou Writer, você só precisa fechar o mais externo (como eu fiz acima), já que o método close chama o close do stream, reader ou writer encapsulado.
Não é preciso, e aliás está errado, ficar fechando tudo.
bom galera,
primeiramente gostaria de agradecer a atenção de todos,
queria dirar mais umas dúvidas:
no exemplo do amigo Thingol ele mudou os objetos:
de PrintWriter para BufferedWriter
de FileWriter para OutputStreamWriter
de FileReader para InputStreamReader
porque ?
Tambem não entendi o porque dos try/catch dentro do finally
a idéia de fechar apenas o objeto mais externo é segura ? o objeto encapsulado será mesmo fechado?
galera, eu sei que para muitos essa dúvidas podem ser simples, mais gostaria de realmente entender a linguagem não apenas decorar.
espero a compreenção de todos.
grato!!!
eduveks
Ssalgado:
Acho que ele quiz dizer que caso o código abaixo lance a exception, as outras linhas não vão ser executadas, e possivelmente fechadas:
if (r != null) {
try {
r.close();
} catch (Exception e) {
throw new Error(e);
}
}
Háaaa há pois é
Dhãnnn!!!
Foi dia de nó cego desculpa ai
eduveks
Não sou um especialista em IO, mas o OutputStreamWriter aceita um OutputStream no construtor, e o FileWriter apenas um arquivo, ou seja o OutputStream é mais versátil, podendo usar até qualquer OutputStream como o System.out. A mesma coisa para o FileReader vs InputStreamReader.
No BufferedWriter vc pode definir o tamanho do buffer, e para usar o PrintWriter apartir do BufferedWriter é assim:
Por q o .close() pode dar IOException, e claro tem q ser tratada.
Eu pensava q não, ou melhor eu não tinha a certeza, sempre tive esta duvida, e também sempre tive a preguiça de testar ou pesquisar para tirar o tira teima, mas se o thingol disse ta dito