comparer deux fichiers en java
Forum Programmation : comparer deux fichiers en java
Bonjour,
je viens vous embêter avec un problème tout bête mais sur lequel je butte depuis un bon moment:
comment faire pour comparer le contenu de deux fichiers textes en java?
On m'a parlé de mettre le contenu des fichiers dans un ByteArrayInputStream (chacun) et de comparer ces arrays.
Bon, la comparaison, facile, fonction compareto().
Mais je ne comprends pas comment faire avec mon Fichier pour transférer son contenu dans le ByteArrayInputStream.
Pourriez-vous m'expliquer?
Merciiiiiiiii
Up plizzzzz
je sais que c'est bête mais j'en ai vraiment besoin et je ne m'en sors pas malgré du temps à chercher dans l'api et la doc
Salut,
Je n'ai pas de grandes connaissances en Java, j'ai commencé cette année, et c'est pas encore ça...
J'ai essayé de te bricoler un truc, c'est un peu fait à l'arrache, et certainement pas optimisé... ça vaut ce que ça vaut !
Code :
|
Cette partie de code te stocke un fichier dans un buffer, puis dans un ByteArrayInputStream, par coup de buffer de 50 byte.
Le problème, c'est que je suis obligé de réinitialiser le ByteArrayInputStream à chaque fois... je sais pas trop comment faire sinon.
Donc, faudrait que tu ouvres tes deux fichiers de la même manière, et que tu les compares à l'intérieur du while( a!= -1). Donc ça fait que tu vas comparer par tranche de 50 bytes, donc si y'a une différence au début, ça va se voir (c'est peut-être pas plus mal en fait mon truc... enfin à tester... j'ai fait que ça moi :-P)
En espérant avoir aidé...
(si besoin d'explications... je peux essayer de t'en fournir :-))
Super, merci Omar.
Sinon, j'ai réussi à bricoler un truc, je ne sais pas si ca marche, je n'a pas encore testé mais ca devrait marcher aussi. Je le donne pour info:
Code :
|
En fait je compare les fichiers via la comande unix "diff -q " qui retourne une phrase si les fichiers sont différents et rien sinon.
Voila, j'espère que ca marche et que ca pourra aider des gens lol.
Mais que d'histoires pour une opération si simple...
En faisant des recherches, j'avais vu ce "diff -q", tu as du tomber sur le même lien que moi, mais je ne sais pas utiliser de lignes de commande en Java, donc j'ai fait ça à la mano, comme un porc !
En regardant le texte.. je ne saurais te dire si ça marche... et j'ai la flemme de tester, mon eclipse est fermé
T'inquiète, j'ai encore quelques ajouts à faire à mon code et après je teste l'ensemble. Si ça ne fonctionne pas je donnerai la solution dans ce topic si j'en trouve une. Enfin je finirai bien par la trouver lol
ouais il y a toujours une solution à un problème, sinon c'est pas un problème.
(bon j'arrête la philo nocturne)
Bah, un peu de philo n'est pas de refus pour relever le niveau de certaines personnes sur ce forum ;-)
Chose promise chose due: je confirme que d'après mes quelques tests ma version a l'air de fonctionner.
Celle d'Omar est certainement meilleure mais je ne l'ai pas testée parce qu'en définitive j'ai dû changer d'optique dans ma programmation et supprimer cette fonctionnalité.
Ok merci pour la confirmation, ça peut servir !
Par contre, dire que ma version est meilleure... ça je suis vraiment pas sûr ! Car j'ai encore du mal (beaucoup même) avec Java !
Moi aussi lol.
Mais le fait de lire le fichier petit à petit me semble meilleur vu que tu peux t'arrêter dès que tu as trouvé une différence.
Enfin, les personnes plus avisées peuvent peut-être (in/)confirmer
oui tu arrête de lire plus tôt, mais en lisant des gros blocs, tu fais moins d'accès disque, alors faudrait mesurer pour savoir exactement :-D
Moi, par défaut, je choisirais de tout lire pour pas avoir un algo qui rame à cause de l'accès disque, mais peut-être que selon le cas d'utilisation je me tromperais ;-)
Oui tu as raison.
L'idéal serait pour des fichiers d'assez petite taille de charger l'entièreté du fichier en mémoire mais de le lire ligne par ligne pour pouvoir s'arrêter dès la 1ère différence.
Mais comme tu dis ca doit dépendre des cas
Il y a 227 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.
