IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Comment lire un fichier à l'envers ?


Sujet :

Langage Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 30
    Points : 17
    Points
    17
    Par défaut Comment lire un fichier à l'envers ?
    Bonjour,

    J'aimerais savoir s'il est posible de lire un fichier ligne à ligne mais en partant de la fin du fichier ?
    Ou alors un moyen d'inverser le fichier et apres effectuer un parcours normal ?

    Merci

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 18
    Points : 20
    Points
    20
    Par défaut
    Citation Envoyé par spip68
    Bonjour,

    J'aimerais savoir s'il est posible de lire un fichier ligne à ligne mais en partant de la fin du fichier ?
    Ou alors un moyen d'inverser le fichier et apres effectuer un parcours normal ?

    Merci
    Pourquoi ne pas parcourir ton fichier en stockant les données dans un tableau, puis parcourir ce tableau de la fin au début, en réécrivant celui ci dans un fichier secondaire (si tu veux le réecrire évidemment) ou en l'affichant.

    Sinon, étant débutant comme toi, de mon savoir (limité) je ne pense pas qu'on sache lire une fichier séquentiel à l'envers.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 30
    Points : 17
    Points
    17
    Par défaut
    Citation Envoyé par Lau.c
    Pourquoi ne pas parcourir ton fichier en stockant les données dans un tableau, puis parcourir ce tableau de la fin au début, en réécrivant celui ci dans un fichier secondaire (si tu veux le réecrire évidemment) ou en l'affichant.

    Sinon, étant débutant comme toi, de mon savoir (limité) je ne pense pas qu'on sache lire une fichier séquentiel à l'envers.
    Parce que je lis des fichers de plusieurs centaines de Mo et donc ça ne tiendra jamais dans un tableau niveau mémoire.

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Février 2006
    Messages
    238
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 238
    Points : 267
    Points
    267
    Par défaut
    ben tu peux lire ton fichier morceau par morceau, tu choisi la taille de ton tableau (fixe) tu lis ton fichier depuis : taille_du_fichier - tableau.length * numero_du_block.
    Tu inverse le tableau et tu effectue tes traitements, puis tu relis en incrémentant le numéro du block.

    Ca marche a condition que tu ne doive pas utiliser tt le contenu du fichier en meme temps...

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 30
    Points : 17
    Points
    17
    Par défaut
    Citation Envoyé par Kh4iN3
    ben tu peux lire ton fichier morceau par morceau, tu choisi la taille de ton tableau (fixe) tu lis ton fichier depuis : taille_du_fichier - tableau.length * numero_du_block.
    Tu inverse le tableau et tu effectue tes traitements, puis tu relis en incrémentant le numéro du block.

    Ca marche a condition que tu ne doive pas utiliser tt le contenu du fichier en meme temps...
    oui mais la je suis coincé avec la taille du tableau.
    Il me faut une lecture ligne à ligne. Donc il n'y a pas de constante "tableau_length" qui me ferait remonter précidement à un debut de ligne. d'autant que les lignes sont indépendantes et de longueurs variables.

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Février 2006
    Messages
    238
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 238
    Points : 267
    Points
    267
    Par défaut
    oui mais tu peux faire un tableau de ligne que tu remplis avec un readLine, tu fait autant de readLine que la taille du tableau.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 30
    Points : 17
    Points
    17
    Par défaut
    c'est moi qui comprend peut etre pas tres bien alors ...

    imaginons pour le premier bloc. On va dire la taille du tableau à 10.
    Je pars de la fin du fichier . Comment je fais pour remonter et me placer exactement 10lignes au dessus dans le fichier pour ensuite faire mes 10 readline à stocker dans le tableau?

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 52
    Points : 55
    Points
    55
    Par défaut
    Bonsoir,

    Je ne crois pas qu'il y ai un moyen de lire un fichier à l'envers (en tout cas j'ai jamais vu ça), par contre, si tu exprimais le pourquoi du comment de ton besoin, on pourrait peut-être trouver une solution alternative... C'est un fichier log, un historique ???

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 30
    Points : 17
    Points
    17
    Par défaut
    Citation Envoyé par yusherboy
    Bonsoir,

    Je ne crois pas qu'il y ai un moyen de lire un fichier à l'envers (en tout cas j'ai jamais vu ça), par contre, si tu exprimais le pourquoi du comment de ton besoin, on pourrait peut-être trouver une solution alternative... C'est un fichier log, un historique ???
    Non c'est un fichier chiffré. le chiffrement est dynamique et utilse N lignes suivantes pour chiffrer la ligne courante.
    Donc la pour le dechiffrement , j'aurais besoin de partir de la fin du fichier pour faire l'opération inverse ...

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 52
    Points : 55
    Points
    55
    Par défaut
    Citation Envoyé par spip68
    Non c'est un fichier chiffré. le chiffrement est dynamique et utilse N lignes suivantes pour chiffrer la ligne courante.
    Quand tu dis les N lignes suivantes, c'est quand même pas toutes les lignes situéees après ??

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2006
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 30
    Points : 17
    Points
    17
    Par défaut
    Citation Envoyé par yusherboy
    Quand tu dis les N lignes suivantes, c'est quand même pas toutes les lignes situéees après ??
    Non non on choisit la longueur de N en parametre du programme

  12. #12
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Mouaip c'est pas optimal tout de même.

    VA faire un tour du coté du RandomAccessFile ça devrait être un peu plus sympathoche pour toi

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 52
    Points : 55
    Points
    55
    Par défaut
    Je connais pas le RandomAccessFile, je n'ai que rarement utilisé des fichiers, et ce n'etait que des petits fichiers.

    Sinon, si j'ai bien tout compris :
    - il suffirait d'instancier un String[N+1] (ou N est égal au chiffre passé en paramètre), et à chaque fois que tu lis une ligne, tu décales les éléments de ton tableau d'un cran vers le haut.
    Ce qui fait qu'une fois à la fin de ton fichier, tu as dans ton String[0] la ligne à décrypter, et dans les indices suivants les lignes pour le décrypter.

    Problème majeur (dans le sens de ce que dit sinok) : il faut recommencer le fichier depuis le début pour décrypter chaque ligne, et si tes fichiers font plusieurs centaines de Mo, ça risque d'être

    while(reader.readLine()!=null)
    {
    over
    }


    long !!


    Par contre, ya un truc que je pige pas, c'est comment sont cryptées les lignes qui n'ont pas N lignes derrière elles ?

  14. #14
    Expert éminent sénior
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    La classe RandomAccessFile te permet de te déplacer de façon libre dans un fichier, par contre tu ne manipuleras pas directement des flux de caractères:


    http://java.sun.com/javase/6/docs/ap...ccessFile.html

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 52
    Points : 55
    Points
    55
    Par défaut
    Merci, j'en avais profité pour y faire un saut.

    Par contre, je suis pas sûr que ça resoudra vraiment le fait que les fichiers font plusieurs centaines de Mo ! Ca risque d'etre lourd quand même non ??
    Je sais même pas si il existe des logiciels de cryptage pro qui puissent manier des fichiers d'une telle taille sans galerer !

  16. #16
    Membre chevronné
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Points : 1 958
    Points
    1 958
    Par défaut
    Si tes fichiers sont très très gros, tu peux te baser sur le principe des fichiers séquentiels indexés :
    Tu lis une première fois ton très très gros fichier ligne par ligne :
    pour chaque ligne tu stockes dans un fichier temporaire l'offset de début de ligne via la méthode getFilePointer() de RandomAccessFile.

    Maintenant, tu vas lire ton fichier temporaire en commançant par la fin :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    int numeroLigne=0
    rafTemporaire.seek(rafTemporaire.length()-numeroLigne*tailleEnBytesDuTypeTeServantAStockerLesIndexes)
    typeTeServantAStockerLesIndexes offset=rafTemporaire.read();
    rafGros.fichier.seek(offset);
    laLigneQueTuCherchais=rafGrosFichier.readLine();

Discussions similaires

  1. Comment lire un fichier XML ?
    Par jeromelef dans le forum Débuter
    Réponses: 6
    Dernier message: 29/06/2005, 15h52
  2. [BCB 5]Comment lire un fichier AVI avec un TAnimate ?
    Par Sitting Bull dans le forum C++Builder
    Réponses: 2
    Dernier message: 15/09/2004, 11h57
  3. Comment lire un fichier DB en cours d'utilisation par 1 autr
    Par jbat dans le forum Bases de données
    Réponses: 4
    Dernier message: 12/03/2004, 11h06
  4. Comment lire un fichier image
    Par Charlemagne dans le forum DirectX
    Réponses: 9
    Dernier message: 12/03/2004, 00h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo