Identificateur de fichier - Java - Programmation
Marsh Posté le 12-01-2004 à 23:47:03
Euh bin... à pat comparer les fichiers octet par octet, y a pas de méthode 100 % sûre de comparaison
Tu peux utiliser diverses méthodes qui vont te donner un résultat avec une marge d'erreur minime (hashage, etc...) mais je crois pas qu'il y ait quoi que ce soit qui permettent de générer un identifiant affirmant avec certitude que deux fichiers sont identiques.
Marsh Posté le 13-01-2004 à 00:09:24
en meme temps, File f = new File(pouet) et File g = new File(tralala), if (f!=null && g !=null && f.exists() && f.getAbsolutePath().equals(g.getAbsolutePath()), ça doit pouvoir le faire
Marsh Posté le 13-01-2004 à 07:16:01
le truc c que mes deux fichiers sont sur deux ordinateurs différents
Je m'interesse à la méthode donnant un résultat avec une marge minime, pourrais je avoir plus de détails sur les fonction de hashage en java svp ?
Merci
Marsh Posté le 13-01-2004 à 07:20:43
Bin y a la classe MessageDigest dans javax.security qui devrait faire la plus grosse partie du boulot pour toi avec l'algorithme MD5. Maintenant, stu connais pas la notion, je te recommanderais de te documenter un peu dessus avant de te lancer dans le codage du truc
Marsh Posté le 13-01-2004 à 08:41:53
il faut que les deux fichiers soient identiques ou que ce soit le meme fichier ?
genre 2 fichiers texte avec "toto" dedans doivent avoir le meme identificateur ? un identificateur different chacun ?
Marsh Posté le 13-01-2004 à 08:49:46
Ben, vu ce qu'il vient de dire, il parle du contenu qui doit ê identique, pas des fichiers. Par contre j'vois pas pourquoi y aurait pas une méthode 100% sûre de comparaison. Essaye de voir si t'as moyen de trouver les sources du fameux "MD5Check" du monde unix (qui permet de calculer un identifiant unique en fonction du contenu d'un fichier, afin de vérifier si, lors d'un téléchargement par exemple, le fichier reçu a exactement le même contenu que le fichier d'origine).
Marsh Posté le 13-01-2004 à 09:22:02
un genre de 'diff/sdiff', il me semble qu'il y a une methode pour ça
edit: ben non (c'est pour des objets ) je vote donc pour un hashage aussi
Marsh Posté le 13-01-2004 à 09:44:20
el_gringo a écrit : Ben, vu ce qu'il vient de dire, il parle du contenu qui doit ê identique, pas des fichiers. Par contre j'vois pas pourquoi y aurait pas une méthode 100% sûre de comparaison. |
ben parce que tu peux pas mettre 2 bits en 1
par contre avec un algo de hashage bien choisi tu peux dire que si le hashachage obtenu est identique, il y a de très fortes chances que les fichiers soient identiques.
Marsh Posté le 13-01-2004 à 11:22:02
benou a écrit : |
Ha ouais. En plus j'avais déja eu une discution + ou - similaire avec toi !
Marsh Posté le 13-01-2004 à 11:33:52
el_gringo a écrit : |
ouais il me semblait bien
Marsh Posté le 13-01-2004 à 12:37:08
benou a écrit : |
mais pour calculer le hash d'un fichier tu dois lire le fichier en intégralité (enfin je crois???), donc autant comparer bit à bit..
Marsh Posté le 13-01-2004 à 12:39:25
Code :
|
et zou
Marsh Posté le 13-01-2004 à 12:41:27
the real moins moins a écrit : mais pour calculer le hash d'un fichier tu dois lire le fichier en intégralité (enfin je crois???), donc autant comparer bit à bit.. |
Bin ui, +1
Pis ça bouffera moins de CPU
Sinon, uriel, pour ton bout de code, j'avais lu quelque part qu'un buffer pour lire des fichiers, c'était bien par blocs de 1024 (j'parle au niveau des perfs).
Marsh Posté le 13-01-2004 à 12:46:33
heckedInputStream cis = new CheckedInputStream(new BufferedInputStream(new FileInputStream("filename" ))
au fait, en passant par un Buffered* , est-ce que ça pose un problème de faire ensuite un read byte par byten c-a-d read(), au lieu de passer par un array buffer?
Marsh Posté le 13-01-2004 à 12:48:58
je viens de voir qu'il y avait aussi CRC32 qu'on peut utiliser a la place du Adler32 ci-dessus.
http://java.sun.com/j2se/1.4.2/doc [...] CRC32.html
Mais ici qqun a du recoder un algo de CRC, parce qu'il n'était apparement pas standard, celui de la sdk.... qqun à un avis la dessus??
Marsh Posté le 13-01-2004 à 12:56:58
the real moins moins a écrit : mais pour calculer le hash d'un fichier tu dois lire le fichier en intégralité (enfin je crois???), donc autant comparer bit à bit.. |
c'est vrais quand tu fais une comparaison unitaire, maintenant si tu dois comparer un ensemble de fichiers à un ensemble de fichier ...
Marsh Posté le 13-01-2004 à 13:03:01
benou a écrit : |
euh quoi?
Marsh Posté le 13-01-2004 à 13:18:51
the real moins moins a écrit : euh quoi? |
ben quoi ?
Imagine que tu dois comparer les fichiers contenus dans 2 reps ? si tu fais des comparaisons bit à bit faudra comparer tous les fichiers 1 à 1 ... alors qu'en calculant un identifiant, tu n'as ensuite plus qu'à comparer les identifiants 1 à 1 ce qui au final t'as fait économiser pas mal de calcul.
Marsh Posté le 13-01-2004 à 13:24:30
et pour calculer les identifiants de chacun des fichiers tu fais comment?
Marsh Posté le 13-01-2004 à 13:27:18
the real moins moins a écrit : et pour calculer les identifiants de chacun des fichiers tu fais comment? |
ben tu lis chaque fichier mais juste une fois
Marsh Posté le 13-01-2004 à 13:31:31
benou a écrit : |
honnetement, tu te trouves clair là?
qui a parlé d'effectuer plusieurs comparaison de chacun des fichiers?
et qu'est-ce que ça a voir avec le fait qu'il y ait plusieurs fichiers, justement. ça n'a a voir qu'avec le fait qu'on veut comparer et recomparer un meme fichier plusieurs fois.
alors ton kiki, tu te le fous au cul, merci.
Marsh Posté le 13-01-2004 à 13:37:12
oui je me trouve clair. C'est même tellement évident que ca a pas besoin d'explication alors c'est pas parce que tu comprends pas que je suis pas clair.
Et je réponds pas pas aux impolis
Marsh Posté le 13-01-2004 à 13:44:33
ok
(sérieux ça fait presque pitié)
Marsh Posté le 13-01-2004 à 13:48:56
attends, t'as vu comment tu me prends de haut ??
C'est toi qui demande un truc et tu te permets de me répondre comme ca parce que je suis pas assez clair pour toi
Marsh Posté le 13-01-2004 à 13:50:16
benou a écrit : |
stoi qui m'a fait un kiki, alors je t'ai demandé si tu te trouvais clair
après avoir compris ou tu voulais en venir, je t'ai expliqué que tu ne l'étais pas, et t'ai renvoyé ton kiki, voila tout
Marsh Posté le 13-01-2004 à 16:37:35
Je ne peux pas comparer les deux fichiers bit à bit puisque qu'il ne sont pas sur le meme ordinateur
je vais me renseigner sur la fonction MD5, elle a l'air interessante
et si j'ai bien compris les fonction adler-32 et CRC32 retourne un identifiant de 32 bits, ce qui me parait insuffisant.
MD5, c bien 128 bits ?
Marsh Posté le 13-01-2004 à 16:38:19
Ui.
Marsh Posté le 13-01-2004 à 16:45:56
y'a une implementation de md5 qui passerait dans CheckedInputStream ?
(d'ailleurs pq ils ont mis CheckedInputStream dans java.util.zip? )
Marsh Posté le 13-01-2004 à 16:46:48
the real moins moins a écrit : y'a une implementation de md5 qui passerait dans CheckedInputStream ? |
je me posais la même question
Marsh Posté le 13-01-2004 à 16:49:13
Citation : Anstatt new java.util.zip.Adler32 gibt's wohl auch noch eine MD5-Klasse. Aber java.util.zip.Adler32 ist angeblich schneller. |
bitte
Marsh Posté le 12-01-2004 à 23:34:01
Bonsoir,
Je cherche une fonction qui avec un fichier en entrée me ressortirait un identificateur spécifique à ce fichier.
Ainsi, si deux fichiers retournent le meme identificateur, on pourrait considérer que ces deux fichiers sont identiques.
Et si on applique la fonction à deux fichiers différents, l'identificateur retourné devra etre différent.
Déjà, est ce que ce genre de fonction est possible ?
est ce qu'elle existe déjà en java ?
le cas échéant, est-elle réalisable ?
Merci