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?