Excluir/Mover Arquivos por uma thread periodica


EDIT

Problema resolvido…haviam arquivos no destino que eu queria mover o arquivo.
Obrigado pela ajuda.


Boa Tarde,

eu tenho um sistema web usando Tomcat e Servlets, onde tem uma thread que verifica arquivos em uma pasta e gera relatorios apartir de xmls e ela é executada a cada X tempo.

Eu tentei fazer com que após ela terminar todo o processo, ela mover o arquivo para uma outra pasta, quando eu testei com a funcionalidade na Main deu certo, mas quando eu jogo ela dentro da funcao run() da thread ela nao consegue mover nem excluir o arquivo.
Alguem tem uma ideia?

O metodo run está mais ou menos assim:

[code]public void run() {

		String pathPastaDestino = //Caminho da pasta onde ele ira gravar os xmls
		File pastaDestino = new File(pathPastaDestino);	
		
		String pathPastaLeitura = //Caminho onde ele irá ler os xmls
		File pastaLeitura = new File(pathPastaLeitura );
								

		RandomAccessFile file = null;		
		
		if (pastaLeitura.exists()) {
			String[] files = pastaLeitura.list();
			for (int i = 0; i < files.length; i++) {
				File filef = new File(pathPastaLeitura + files[i]);
				
				try {
					if(filef.isFile()){
						file = new RandomAccessFile(filef,"r");
			
						byte fileContent[] = new byte[(int) file.length()];
						file.read(fileContent);
		
						ByteArrayInputStream byis = new ByteArrayInputStream(new String(fileContent).replaceAll("UTF-7","ISO-8859-1").getBytes());
						CarteiraConsolidadaXMLReader xmlReader = new CarteiraConsolidadaXMLReader(byis);
						CarteiraConsolidadaBean carteiraConsolidada = xmlReader.read();
						
								
						createReportPdf(carteiraConsolidada, files[i].substring(0,files[i].lastIndexOf(".")) + ".pdf");
								
						file.close();
					}

				}catch (Exception e) {
					System.out.println("Erro na Geracao do Relatorio...");
					e.printStackTrace();
		
					return;
				}finally{
					if(filef.renameTo(new File(pastaDestino, filef.getName()))){
						System.out.println("sucesso");
					}else{
                                                   System.out.println("erro");
                                            }
					
				}
			}
		}
}[/code]

Desculpe pelo flood mas é que tenho um pouco de urgencia nisso. Nao achei nada parecido no google, nem em livros.

Se alguem também tiver alguma ideia para fazer diferente disso eu estou aceitando tb.

Você não consegue mover ou excluir um arquivo se ele ainda estiver aberto (nem que seja só para leitura).

Além disso, confira para ver se os paths dos arquivos estão corretos se você executar o método no “run”. Pode ser que eles não estejam corretos.

os paths sao os mesmos pq eu recupero eles do properties.

eles não estao sendo usados por ning alem da thread

E qual a exceção (stack trace), por obséquio?

nao tinha exceção, ele só nao conseguia mover o file, mas acabei descobrindo que era pq existia um arquivo com o mesmo nome no destino

É, uma coisa ruim de algumas APIs de I/O do Java é que elas não retornam corretamente um erro. Por exemplo, se você tenta renomear um arquivo e a operação não deu certo, às vezes não se lança exceção nem o valor de retorno fica em “false”. É necessário conferir para ver se a operação deu certo, o que é bem desagradável.