Quando eu lanço uma exceção dentro do meu for, depois eu não estou conseguindo apagar o arquivo pois fala que ele está em uso pelo processo do java…
List<File> fileApagar = new ArrayList<File>();
for (File file: files)
{
try
{
if(operacao == null){
throw new Exception("Operação Invalida");
}
}catch(Throwable th)
{
fileApagar.add(file);
///grava os logs no banco do erro
}
}
for (File file : fileApagar) {
if (file != null && file.exists()){
file.delete(); //aqui da o erro na hora de apagar
}
}
for (File file: files)
{
try
{
if(operacao == null){
throw new Exception("Operação Invalida");
}
}catch(Throwable th)
{
// ao inves de jogar o arquivo para outra lista e depois dar um loop nela, porque nao apagar imediatamente o arquvo do disco ?
file.delete();
}
}
Ja respondendo a pergunta do mozena e do CristianPalmaSola10…
Seguinte a lógica do CristianPalmaSola10 de colocar o delete dentro do catch eu tentei, mas não apaga do mesmo jeito…
Sobre ta executando em máquina local eu estou, só que o problema é que a aplicação é em JavaEE e esse código está dentro de um timer que o glasfish dispara de 1 em uma hora…
Ai eu não posso matar o processo do java…
Se tiverem alguma outra idéia, será de grande ajuda
File f = ...;
FileOutputStream fos = null;
try {
try {
/* O código que abre o arquivo fos e que eventualmente pode dar problemas */
} finally {
// Mesmo que ocorrer algum problema, vamos fechar o arquivo na marra
if (fos != null) try { fos.close(); }
}
} catch (Throwable thr) {
f.delete(); // tratamento de apagamento de arquivos - aqui o arquivo deve ter sido fechado no finally
}
Testei local e funcionou corretamente. A task qye você configurou demora quanto tempo para finalizar? Será que não está executando uma em cima da outra ?
Outro ponto de atenção: No final do processo o glasfish está matando as threads ? tem como você conferir ?
Esses dias eu passei por algo semelhante, eu criava um arquivo no servidor para gravar uns dados e depois tentava apaga-lo e ele não era apagado, depois de muito bater cabeça percebi que o arquivo naum era apagado por eu naum dar um close nele antes, talvez seja isso agora tambem