Problema ao apagar arquivos

Pessoal, observem meu código abaixo:


import java.io.File;
import java.io.FilenameFilter;
import java.util.Timer;
import java.util.TimerTask;
import java.util.Vector;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.xml.sax.SAXParseException;

/**
 *
 * @author fabio.silva
 */
public class ChecaArquivos extends Thread  {
    
    @Override
     public void run() {
        //a cada 5 segundos, lê o diretório de arquivos de origem
        Timer timer = new Timer();
        timer.schedule(new Tarefa(), 0, 5*1000); 
    }
    
    class Tarefa extends TimerTask{

        @Override
        public void run() {
            //System.out.println("Opa!");
            String dir = "c:\orig";
            Vector arquivosValidos = new Vector();
            Vector arquivosInvalidos = new Vector();

            File diretorio = new File(dir);             
            FilenameFilter filtro = new FilenameFilter() {
                public boolean accept(File dir, String name) {
                    return (name.endsWith(".xml"));
                }
            };            
            File fList[] = diretorio.listFiles(filtro);
            
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            Document xml;
            DocumentBuilder builder;
            
            for ( int i = 0; i < fList.length; i++ ){
                //abre e trata os arquivos XML
                try {
                    builder = factory.newDocumentBuilder();
                    xml = builder.parse( fList[i].getAbsoluteFile() );
                    //System.out.println(xml.getFirstChild().getNodeName());
                    arquivosValidos.add(fList[i].getAbsoluteFile().toString());
                }
                catch (SAXParseException e) {
                    //não é arquivo XML, então move para a basta de "lixo"
                    //System.out.println("XML inválido!");
                    arquivosInvalidos.add(fList[i].getAbsoluteFile().toString());
                }
                catch (Exception e){
                    System.out.println("Ops!");
                    e.printStackTrace();
                }
                finally{
                    xml = null;
                    builder = null;
                }
            }
        
            File temp;
            for(int i=0;i<arquivosInvalidos.size();i++)
            {
                temp = new File(arquivosInvalidos.get(i).toString());
                System.out.println(temp.exists()); //retorna true
                System.out.println(temp.delete()); //retorna false
                
            }
        }
        

        
    }

}

Essa classe fica rodando e checando um diretório em busca de arquivos XML e em teoria, devia apagar os outros. Mas o problema é que alguma coisa está bloqueando os arquivos, impedindo de apagá-los. Alguém consegue ver o porque?

Ninguém? :frowning:

Se tiver algo bloqueando ele, recolha o lixo com System.gc();

Em todo caso, pedidos ao sistema operacional são somente pedidos, não quer dizer que ele os cumpra imediatamente.

Cara, resolveu.

Não sei se é a solução perfeita, mas resolveu. Valeu!