Listando os arquivos de uma pasta

10 respostas
gfuranku

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!!!

10 Respostas

Cesimar

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.

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

gfuranku

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

gfuranku

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

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…

M

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/");
gfuranku

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/);

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…

Cesimar

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

M

É só fazer isso:

Date d = new Date(tempoEmMilissegundos);
gfuranku

marcobiscaro2112:
É só fazer isso:

Date d = new Date(tempoEmMilissegundos);

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.

gfuranku

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.

Criado 12 de outubro de 2010
Ultima resposta 12 de out. de 2010
Respostas 10
Participantes 4