Se connecter / S'enregistrer
Votre question

comparer deux fichiers en java

Tags :
  • Java
  • Programmation
Dernière réponse : dans Programmation
27 Mai 2006 21:39:02

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

Autres pages sur : comparer fichiers java

27 Mai 2006 22:14:28

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
a c 232 L Programmation
27 Mai 2006 22:59:30

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 !

  1. import java.io.*;
  2.  
  3. public class CompareTwoFile {
  4.  
  5. public static void main(String[] args) {
  6. byte buffer[] = new byte[50];
  7. try {
  8. FileInputStream fis = new FileInputStream("C:\\test.txt");
  9. ByteArrayInputStream bais = new ByteArrayInputStream(buffer);
  10. int i = fis.read(buffer);
  11. while (i!=-1) {
  12. int a = bais.read();
  13. while (a != -1) {
  14. System.out.print((char) a);
  15. a = bais.read();
  16. }
  17. i = fis.read(buffer);
  18. bais.reset();
  19. }
  20. bais.close();
  21. fis.close();
  22. } catch (FileNotFoundException e){
  23. e.printStackTrace();
  24. } catch (IOException e) {
  25. e.printStackTrace();
  26. }
  27. }
  28. }


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 :-))
Contenus similaires
27 Mai 2006 23:17:46

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:

  1. String cmd = "diff -q fich1 fich2";
  2. try {
  3. Processus proc = Runtime.getRuntime().exec(cmd);
  4. InputStream is = proc.getInpuStream();
  5. InputStreamReader isr = new InputStreamReader (is);
  6. BufferedReader br = new BufferedReader (isr);
  7.  
  8. if (br.readLine().getLength() > 0) {
  9. boolean idem = false;
  10. }
  11. else {
  12. boolean idem = true;
  13. }
  14. catch (Exception e) {
  15. }



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...
a c 232 L Programmation
27 Mai 2006 23:27:44

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é
27 Mai 2006 23:29:56

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
a c 232 L Programmation
27 Mai 2006 23:34:15

ouais il y a toujours une solution à un problème, sinon c'est pas un problème.
(bon j'arrête la philo nocturne)
27 Mai 2006 23:39:26

Bah, un peu de philo n'est pas de refus pour relever le niveau de certaines personnes sur ce forum ;-)
29 Mai 2006 05:11:22

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é.
a c 232 L Programmation
29 Mai 2006 09:53:29

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 !
29 Mai 2006 11:26:08

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
a b L Programmation
29 Mai 2006 19:07:23

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 ;-)
29 Mai 2006 19:20:31

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
19 Octobre 2013 10:10:00

towanda@IDN a dit :
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


Chaabani Mehdi : voila une reponse :
http://java.mesexemples.com/fichiersrepertoires/java-so...
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS