Metodo delete() do File n ão apaga arquivo de jeito nenhum(resolvido)

6 respostas
M

oi pessoal… bom…vo direto ao ponto…nao vo cola codigo pq nao to no pc do serviço, mais em resumo, o metodo delete() de File não ta apagando o arquivo de jeito nenhum…

–> sei que esse arquivo existe pq recebo ele de um listFiles(<tinha um FileFilter aqui>)

–> sei que tenho permissão para tal pois testei com arquivos que eu consigo copiar e excluir pelo windows/dos

ao invez usar meuFile.delete(), eu tentei usar Runtime.getRuntime().exec(("del/q "meuFile.toString()))

percebi que o delete() de file retorna um boolean confirmando se excluiueu fiz isso:

boolean b = false;

do{

b = meuFile.delete();

}while(!b);

o problema é que assim a CPU vai a 100% e assim mesmo custa um certo tempo (alguns segundos, geralmente mais q 5, e preciso fazer isso com varios arquivos) pra apaga o raio do arquivo (perdi a tarde toda com isso hj)…

se alguem ai puder me ajudar, contar como resolveu isso no passado, eu to mto grato…

6 Respostas

B

Provavelmente o teu arquivo ainda está mapeado pelo sistema, e a VM não liberou os recursos.

Tente dar um System.gc() antes de tentar um delete.

L

Quando o sistema entra em loop de while(true){…} sem nenhuma pausa a thread corrente consome todos os recursos do sistema, por isso a CPU vai para 100%. Adicione no código do seu while um Thread.sleep(10) e me diga se o problema continua. A melhor forma seria colocar um número de máximas tentativas junto com o sleep.

M

em relação ao Thread.sleep eu ja tinha colocado (mais eskeci de flaa ai no topico), apesar que coloquei sleep(1)…talves seja poco, o caso é que eu não quero sair sem apagar esses arquivos por isso nao quero colocar um numero maximo de loops…

o problema é que mesmo assim, as vezes ta saindo do loop sem ter apagado os arquivos (o delete() ta retornando true sem apagar???)

eu vo tenta chama o garbage antes…(nem nunca imaginei que isso podia adianta alguma coisa, mais tem mto sentido mesmo…)

eu ja retorno akipra posta osresultados…vlw galera kem ajudo…

L

Cara, que arquivos vc está tentando deletar? Parece-me que alguma outra aplicação está recriando este arquivo, já que vc disse que tem permissão FULL, não é? Ou então, vc não está achando o arquivo.

Tente o seguinte: Faça um

if ( file.exists() )
        System.out.println("Arquivo localizado!");
   try{
        System.out.printf("Path:%s\r\n", file.getCanonicalPath() );
   }catch(...)

Com isso vc pode matar a possibilidade de não está realmente achando o arquivo.

M

ae galera…aki funciono legal…

vlw mesmo hein… tirei o loop inclusive e funciono normal…obrigadão a todo mundo que veio aqui me ajuda, vlw mesmo…

M

não…nem era isso luca… era o sistem.gc que nosso amigo disse(foi só coloca ele e resolveu)… tem sentido o que vc falo mais nao era o que tava acontecendo (ainda bem pq senao eu ia ter que mecher em outros codigos tb… de qualquer jeito vlw ai a força, levanta as possibilidades e se interessa por ajudar…isso que faz o forum continua…

Criado 6 de maio de 2008
Ultima resposta 7 de mai. de 2008
Respostas 6
Participantes 3