Comparar Arquivos do Servidor

Olá pessoal, tem algum jeito ou api para comparar um arquivo do pc com o arquivo do servidor, preciso fazer algo que se for diferente ele traz o arquivo do servidor.
Alguém tem alguma ideia ?
Obrigado

No sentido em que você usou o verbo, a grafia é “traz”. Coisas da língua portuguesa…

Na verdade, o que normalmente se faz para manter dois diretórios sincronizados (que é o que provavelmente você está querendo fazer) é usar algum serviço como o rsync. (Se o servidor for Windows, há uma implementação desse protocolo com o produto DeltaCopy - http://www.aboutmyip.com/AboutMyXApp/DeltaCopy.jsp ) . Se o servidor for Linux ou algum sabor do Unix (como o Solaris) o rsync está disponível e talvez já esteja até instalado.


http://ricardomartins.com.br/2009/08/09/rsync-no-windows/

Se você não pode instalar o rsync no servidor nem no cliente, então você pode usar um método muito tosco, que é o de comparar o tamanho e a data. Se o tamanho e/ou data estiverem diferentes, provavelmente o arquivo é outro e você tem de puxar o arquivo inteiro (eu disse que isso era tosco, não?)
Se o tamanho e a data forem iguais, então talvez o arquivo seja o mesmo e você não precise puxá-lo, mas você não tem garantia de que realmente o arquivo seja mais novo :frowning:

EDIT - a língua portuguesa é mais traiçoeira que eu estava imaginando. Na verdade, o tempo certo do verbo força a usar a palavra “traga”, não “traz”. Como dizia o Bill Clinton, “fumei mas não traguei” :slight_smile:

Compara o md5sum dos arquivos do servidor e do cliente.

Se forem diferentes, então os arquivos são diferentes também.

[quote=andreiribas]Compara o md5sum dos arquivos do servidor e do cliente.

Se forem diferentes, então os arquivos são diferentes também.

[/quote]

E como comparar o md5sum com java ?

Se você for calcular o MD5 do arquivo do servidor, há duas maneiras:
a) Ou você executa um comando remotamente, que calcule esse MD5 e evite trazer esses dados do servidor :frowning:
b) Ou então você calcula o MD5 trazendo todos os dados do servidor para o cliente. Mas se você vai fazer isso, então é melhor já copiar o arquivo de uma vez do servidor, já que vai ter de trazer todos os dados para calcular o MD5 :frowning:

Uma forma que alguns sistemas fazem é o seguinte: periodicamente eles rodam um script (talvez via crontab) que cria arquivos com o md5 e os deixa em um diretório separado. Aí quem for pegar o arquivo do servidor deve, primeiramente, checar esse arquivo de md5, antes de baixar alguma coisa. Isso costuma funcionar bem se:
a) O servidor for Unix, Linux, alguma coisa que tenha o programa “md5sum” e o “cron”, já pronto,
b) Os arquivos não se modificarem muito frequentemente (por exemplo, arquivos de downloads de programas, que você normalmente vai atualizar no máximo uma vez por dia).
c) O cliente também tiver o programa md5sum.

[quote=entanglement]Se você for calcular o MD5 do arquivo do servidor, há duas maneiras:
a) Ou você executa um comando remotamente, que calcule esse MD5 e evite trazer esses dados do servidor :frowning:
b) Ou então você calcula o MD5 trazendo todos os dados do servidor para o cliente. Mas se você vai fazer isso, então é melhor já copiar o arquivo de uma vez do servidor, já que vai ter de trazer todos os dados para calcular o MD5 :frowning:

Uma forma que alguns sistemas fazem é o seguinte: periodicamente eles rodam um script (talvez via crontab) que cria arquivos com o md5 e os deixa em um diretório separado. Aí quem for pegar o arquivo do servidor deve, primeiramente, checar esse arquivo de md5, antes de baixar alguma coisa. Isso costuma funcionar bem se:
a) O servidor for Unix, Linux, alguma coisa que tenha o programa “md5sum” e o “cron”, já pronto,
b) Os arquivos não se modificarem muito frequentemente (por exemplo, arquivos de downloads de programas, que você normalmente vai atualizar no máximo uma vez por dia).
c) O cliente também tiver o programa md5sum.

[/quote]

mas como comparo o md5sun ?
os servidores são linux, os clientes podem ser linux e windows

[quote=RenanRosa][quote=andreiribas]Compara o md5sum dos arquivos do servidor e do cliente.

Se forem diferentes, então os arquivos são diferentes também.

[/quote]

E como comparar o md5sum com java ?[/quote]

Você pode fazer do jeito que o entanglement falou, ou usar essa biblioteca:

http://twmacinta.com/myjava/fast_md5.php

Ressuscitando…

Dependendo da necessidade de cada um, até compensa comparar o

file.lastModified() .

Abs

Bom dia!

Estou querendo fazer exatamente esse método “tosco” que você falou, hehe. Como faço isso, tem algum exemplo de código?