E ae galera!
Bem…estou fazendo uma aplicação para enviar imagens a um servidor (é uma aplicação WEB, com JSF e RichFaces, mas o erro em sí não é com um dos frameworks em sí e sim com a classe File em sí). O problema é que algumas vezes quando eu tento deletar as imagens acontece um bug estranho.
primeiro eu vou postar o código do método em questão:
[code]public void deleteUploadedFile(ActionEvent event) throws Throwable {
UIComponent link = event.getComponent();
UIParameter param = (UIParameter) link.findComponent(“fileId”);
TheFile file = this.uploadedFiles.get((Integer) param.getValue());
try {
File f = new File(file.getPath(), file.getName());
if ((f.exists()) && (f.canRead()) && (f.canWrite())) {
if(f.delete()){
for(int i=0; i<file.getThumbs().size(); i++){
File t1 = new File(file.getPath(), file.getThumbs().get(i).getThumbName());
t1.delete();
}
setDeleted(true);
}
else{
setDeleteLog("Arquivo não pode ser excluido");
setDeleted(false);
}
} else {
setDeleteLog("Erro ao tentar excluir o arquivo");
setDeleted(false);
}
this.finalize();
} catch (Exception ex) {
setDeleteLog("Deu erro: " + ex);
} finally {
if (this.deleted) {
if (this.uploadedFiles.remove(file)) {
setDeleteLog("Conseguiu remover");
} else {
setDeleteLog("Deu erro");
}
}
}
}[/code]
O que ocorre é que quando a linha f(f.delete())
é executada, algumas vezes, acontece um bug estranho. Que é o seguinte…os dados do arquivo são apagados como esperado, mas o arquivo em si não. Por alguma razão o JAVA continua usando aquele arquivo, acontece algo que ele não consegue remover (a função delete de fato returna false) mas o algum método (que não de minha classe) continua usando o arquivo, mesmo depois de executar o finalize.
E pior, uma vez que acontece este bug, em todas as próximas tentativas de deleção acontece o mesmo bug.
Minha pergunta é…o que isto pode ser (o porque disto estar acontecendo) e como eu poderia resolver isto?! :?