Erro estranho com java.io.File

0 respostas
WebX

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:

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");
                }
            }
        }
    }
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?! :?

Criado 11 de setembro de 2008
Respostas 0
Participantes 1