Listando os arquivos de uma pasta

Tenho uma pasta com X arquivos.

Esses arquivos são relatorios emitidos de 15 em 15 minutos por um outro aplicativo.

[i][b]Problema:

Criar um programa que idexe os arquivos da pasta e retorne o ultimo arquivo escrito. Caso o arquivo tenha um tempo superior a 20 min, eu jogo um popup na tela informando:
“Emissor de relatorios parado”.[/b][/i]

[b]Duvidas:

Como eu posso listar todos os arquivos de um determinado diretorio e progredir a busca?
Como posso disparar esse metodo por tempo? (Ex: Rodar a rototina a cada 2 min)[/b]

Grato pela ajuda!!!

Amigo use a classe java.io.File. Essa é a classe usada pra manipular arquivos. Veja esse artigo que você ficará expert nisso: http://www.guj.com.br/article.show.logic?id=13.

Olá,

a primeira parte da sua dúvida pode ser resolvida dessa forma:

public static java.util.List<FileItem> listDirectoryAppend(File dir, java.util.List<FileItem> lista) { if (dir.isDirectory()) { String[] filhos = dir.list(); for (int i = 0; i < filhos.length; i++) { File nome = new File(dir, filhos[i]); if (nome.isFile()) { if (nome.getName().toUpperCase().endsWith(".GBK")) { lista.add(new FileItem(nome)); } } else if (nome.isDirectory()) { listDirectoryAppend(nome, lista); } } } else { lista.add(new FileItem(dir)); } return lista; }

A segunda parte, sobre agendamento de tarefas na VM, eu recomendo dar uma olhada nesse aqui: http://www.quartz-scheduler.org/

ou pensar em um script a ser rodado no cron ou um batch no agendador de tarefas fo win…

O método de File para obter a última alteração é lastModified().

fw

Muito obrigado, eu achei o metodo list() que vai me ajudar MUITO

[quote=Dieval Guizelini]Olá,

a primeira parte da sua dúvida pode ser resolvida dessa forma:

public static java.util.List<FileItem> listDirectoryAppend(File dir, java.util.List<FileItem> lista) { if (dir.isDirectory()) { String[] filhos = dir.list(); for (int i = 0; i < filhos.length; i++) { File nome = new File(dir, filhos[i]); if (nome.isFile()) { if (nome.getName().toUpperCase().endsWith(".GBK")) { lista.add(new FileItem(nome)); } } else if (nome.isDirectory()) { listDirectoryAppend(nome, lista); } } } else { lista.add(new FileItem(dir)); } return lista; }

A segunda parte, sobre agendamento de tarefas na VM, eu recomendo dar uma olhada nesse aqui: http://www.quartz-scheduler.org/

ou pensar em um script a ser rodado no cron ou um batch no agendador de tarefas fo win…

O método de File para obter a última alteração é lastModified().

fw[/quote]

Não precisa ser tão complexo, não terei que fazer busca recursiva.

O unico problema que sobrou é que a pasta não está na maquina e sim em um caminho na rede. Como posso armazenar em uma variavel do tipo File, um caminho de arquivo na dere. Sempre que eu coloco \ no inicio ele enfia o c:\ na frente…

Bem, você terá que mapear a unidade de rede e se referir ao caminho mapeado. Por exemplo, se mapeado em Z:

File dir = new File("z:/relatorios/");

[quote] 12/10/2010 13:36:37

Bem, você terá que mapear a unidade de rede e se referir ao caminho mapeado. Por exemplo, se mapeado em Z:
view plaincopy to clipboardprint?
File dir = new File(“z:/relatorios/”);
File dir = new File(“z:/relatorios/”);

[/quote]

Descobri que assim tambem funciona:

File caminho = new File("\\192.168.0.21\arquivo");

Que droga o lastModified(), te devolve a data em milisigundos desde de 1970, que feio, tenho que transformar isso em horario, mas sei que no forum tem um artigo sobre isso…

Vê ai brother: http://www.guj.com.br/posts/list/116123.java

É só fazer isso:

Date d = new Date(tempoEmMilissegundos);

[quote=marcobiscaro2112]É só fazer isso:

Date d = new Date(tempoEmMilissegundos); [/quote]

E eu que tava fazendo um monte de calculo pojistico para isso.

Last one:

tenho duas datas, preciso pegar a diferença entre eles em minutos.

Gente, não liga de eu enxer de perguntas não ta. Eu acabo achando depois no google, mas normalmente as soluções postadas aqui são melhores.
No final eu posto o codigo.

Feito!!!
Uhuuu

import java.io.File;
import java.util.Date;
import javax.swing.JOptionPane;


public class Principal {

    public static void main(String args[]){

        File caminho = new File("C:\Program Files\Java\jdk1.6.0_21\bin");
        File lista[] = caminho.listFiles();
        File last = new File("\");
        String concat = "";
        Date hora;
        Date agora;
        int agoraint = 0;
        int ultimoint = 0;
        long modificado = 0;
        int dif = 0;


        JOptionPane.showMessageDialog(null, caminho);
        
        for (int cont = 0; cont < lista.length; cont++){

            if(lista[cont].lastModified() > modificado){

                modificado = lista[cont].lastModified();
                last = lista[cont];

            }


            
        }
        concat = last+"";
        concat = concat.substring(38);
        hora = new Date(modificado);
        agora = new Date();

        agoraint = agora.getHours() * 60;
        agoraint += agora.getMinutes();

        ultimoint = hora.getHours() * 60;
        ultimoint += hora.getMinutes();


        if(agora.getDay() != hora.getDay())
            agoraint = agoraint + (24*60);

        dif = agoraint - ultimoint;

        if(dif > 20)
            JOptionPane.showMessageDialog(null, "Emissor de Relatorio parado!!!!!");

       
    }
}

Logica:
transformei os horarios em minutos e verifiquei se a diferença é maior que 20.

Vlw gente. Obrigado a todos.