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

Entrée/Sortie Java Discussion :

Lire un fichier depuis le dernier byte


Sujet :

Entrée/Sortie Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2005
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 117
    Par défaut Lire un fichier depuis le dernier byte
    Afin de lire des très gros fichiers, de log par exemple, j'aimerais écrire un petit programme qui commence à lire un fichier depuis la fin. Cela permettrait de lire d'abord l'essentiel en attendant que le début ne se charge.

    J'ai éssayé pas mal de chose, mais apparement, java se contente d'appeler des méthode natives qui commencent forcément à lire un fichier depuis son début. J'espère que vous avez une solution pour ce problème si peu courrant...

    Il faut aussi considerer que les fichiers peuvent avoir plus de 2 millions de bytes, et donc que les classes utilisant des int en tant que curseurs de parcours de fichiers ne sont pas adaptés ici...

    Je me suis cassé les dents, vous êtes mon dernier recours... help...

  2. #2
    Membre confirmé
    Inscrit en
    Décembre 2005
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 117
    Par défaut
    J'ai partiellement trouvé la solution:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    public void run() {
    		super.run();
    		try{
    			RandomAccessFile random = new RandomAccessFile(urlLog.getText(), "r");
    			long size = random.getChannel().size();
    			status.setText("Nombre de caractères du fichier: " + size);
    			sb = "";
    			for(long i = size; i > 0; i--){
    				random.seek(i-1);
    				char car = (char)random.read();
    				sb = car + sb;
    				if(sb.startsWith("\n") && i%10 == 0)
    					refreshContent();
    			}
    			refreshContent();
    		}catch(Exception e){
     
    		}
    	}
     
    	private void refreshContent() {
    		txtArea.insert(sb, 0);
    		sb = "";
    		scroll.updateUI();
    	}
    Il reste cependant un soucis, le code génère une erreur OutOfMemory... Help
    Et aussi, y a-t'il moyen de faire la même chose avec nio ?

  3. #3
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Et bien, j'aurais utiliser le même type de fichier (RandomAccessFile)...
    Le OutOfMemoryError pourrait venir de l'utilisation d'une variable de type String pour la concaténation dans une grosse boucle, tu devrais peut-être utiliser un StringBuffer ou StringBuilder (si tu as la version 1.5 ou +), ceci dit, ce n'est pas certain que ça règle le problème (mais tu peux toujours essayer )

    A+
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre confirmé
    Inscrit en
    Décembre 2005
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 117
    Par défaut
    Et bien en fait, j'éssaye de lire des fichiers de logs qui font plus de 2millions de caractères (plusieurs centaines de Mbytes) et je les affiche dans un JTextArea. Je pense que ce composant utilise un String effectivement... J'espère ne pas avoir à redévelopper tout ça...

Discussions similaires

  1. lire un fichier à depuis la fin
    Par alaninho dans le forum C++
    Réponses: 3
    Dernier message: 02/10/2011, 09h50
  2. Lire un fichier depuis un EJB
    Par toure32 dans le forum Glassfish et Payara
    Réponses: 1
    Dernier message: 16/02/2010, 15h06
  3. [AJAX] Lire un fichier depuis une URL?
    Par PlaTyPuSs dans le forum AJAX
    Réponses: 6
    Dernier message: 01/06/2009, 13h28
  4. Réponses: 3
    Dernier message: 09/06/2008, 15h01
  5. Lire un fichier depuis les ressources
    Par Silverstone dans le forum C++
    Réponses: 1
    Dernier message: 02/11/2007, 18h57

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