Detectar se um arquivo foi modificado

Galera estou querendo saber se existe alguma classe que saiba se um determinado “File” foi modificado.

Olá, acredito que seja assim:

File file = new File("c:\\arquivo.txt");
file.lastModified()

Tenta olhar esse tutorial, pra ver se é o q está querendo:
http://www.mkyong.com/java/how-to-get-the-file-last-modified-date-in-java/

ojnacra não é bem isso que eu quero, queria que quando alguem alterasse ele disparasse para o usuario.

Olá Xore2008,

Eu precisei fazer isso também para uma auditoria em uma pasta aqui na empresa, a forma mais simples que encontrei para mim foi usando C# com FileSystemWatcher. A implemetação foi realmente bastante simples.

Se quiser seguir esse caminho, tem um artigo bem legal aqui: http://csharpbrasil.com.br/monitorando-arquivos-e-diretorios-com-filesystemwatcher/

Em anexo segue o programa em C# que eu fiz, é bem simples pois o propósito era bem específico, mas de repente te ajuda.

MonitorarPasta.exe (16.5 KB)

1 curtida

Obrigado jhonny era exatamente isso que eu queria, pena que é para c# ;/. Vou Continuar a pesquisar para ver se acho para java. Ou entao tentar integrar .

Essa solução verifica um arquivo, para verificar vários arquivos vai ter que adicionar vários watchServices… Mas acho que isso já soluciona teu problema!

Path path = Paths.get("..\\src");
    WatchService watchService = null;
    try {
        watchService = path.getFileSystem().newWatchService();
        path.register(watchService, StandardWatchEventKinds.ENTRY_MODIFY);
    } catch (IOException e1) {
        e1.printStackTrace();
    }
     
    //loop infinito
    while(true){
        WatchKey key = null;
        try {
            key = watchService.take();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        // iterate for each event
        for(WatchEvent<?> event:key.pollEvents()){
            switch(event.kind().name()){
            case "ENTRY_MODIFY":
                System.out.println("File " + event.context() + " is changed!");
                break;
            }
        }
        //Resetar a key é importante para receber as próximas notificações
        key.reset();
    }

Vamos la

vc tem duas formas de fazer isso, pelo menos

a primeira e dada uma lista de arquivos, vc periodicamente verifica se alguma propriedade mudou desde a ultima verificação.

a segunda é usar o sistema de arquivos do sistema operacional para receber um evento quando o arquivo foi modificado. no linux vc tem a lib inotify que pode fazer isso mas integra-la com Java pode ser interessante ( via JNI, ai vc vai ver o que é bom pra tosse ).

a segunda forma é dependente de muitas coisas. a primeira é generica.

agora lembre-se que em varios sistemas de arquivos, um arquivo pode ser varias coisas como

  • um diretorio
  • um link para algum outro arquivo
  • um dispositivo de bloco
  • um named pipe
  • um socket
  • um arquivo virtual

então esteja atendo.

pode disponibilizar o fonte deste exe?
o passo a passo cria mas é outro.
Queria saber tambem se tem como colocar o usuario que fez a alteração, aqui temos um compartilhamento samba com aut. no AD w2012

To check if File was modified try this,

File fl = new File(“c:\demo.txt”);
fl.lastModified()