Tom's Guide > Forum > Programmation > comparer deux fichiers en java

comparer deux fichiers en java

Forum Programmation : comparer deux fichiers en java

TomsGuide.com : 800 000 inscrits répondent à toutes vos questions high-tech et informatique. Pour obtenir de l'aide, inscrivez-vous gratuitement !
Mot :    Pseudo :           
 

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

Liens sponsorisés
Inscrivez-vous ou connectez-vous pour masquer ceci.

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

Répondre à towanda@IDN
- 0 +

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



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 :-))

Répondre à OmaR

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 :
  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.       if (br.readLine().getLength() > 0) {
  8.           boolean idem = false;
  9.       }
  10.       else {
  11.           boolean idem = true;
  12.       }
  13. catch (Exception e) {
  14. }




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...

Répondre à towanda@IDN
- 0 +

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é

Répondre à OmaR

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

Répondre à towanda@IDN
- 0 +

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

Répondre à OmaR

Bah, un peu de philo n'est pas de refus pour relever le niveau de certaines personnes sur ce forum ;-)

Répondre à towanda@IDN

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é.

Répondre à towanda@IDN
- 0 +

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 !

Répondre à OmaR

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

Répondre à towanda@IDN

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 ;-)

Répondre à CRicky

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

Répondre à towanda@IDN
Tom's Guide > Forum > Programmation > comparer deux fichiers en java
Aller à :

Il y a 227 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici.

Attention

Vous allez répondre sur un sujet resté inactif pendant plus de 6 mois.
Assurez-vous d'apporter des éléments nouveaux à la discussion avant de poursuivre.

Répondre Annuler
Liens