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 :

taille d'un fichier


Sujet :

Entrée/Sortie Java

  1. #1
    Membre averti
    Inscrit en
    Juillet 2004
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 28
    Par défaut taille d'un fichier
    Bonjour,


    Quel est le code à utiliser pour récupérer la taille d'un fichier,
    et ainsi pouvoir monitorer le out of memory à la lecture d'un fichier trop gros.?

    Merci


    Phileme

  2. #2
    Membre Expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Par défaut
    Voici comment je fais.
    Je charge d'abord le fichier dans un tableau de byte puis je lis la taille de mon tableau ce qui me donne la taille du fichier en octets.

    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
    26
    27
    28
    29
    	/**
             * Load the content of a {@link File} in an array of bytes.
             * 
             * @param inputFile The {@link File} to load.
             * @return An array of bytes (content of the <code>inputFile</code>).
             * @throws IOException
             */
    	public static byte[] loadFileToBytes(File inputFile) throws IOException {
    		if (inputFile == null) {
    			throw new IllegalArgumentException("Input file cannot be null.");
    		}
    		FileInputStream fis = null;
    		FileChannel fc = null;
    		ByteBuffer bb = null;
    		try {
    			fis = new FileInputStream(inputFile);
    			fc = fis.getChannel();
    			bb = ByteBuffer.allocate((int) fc.size());
    			fc.read(bb);
    		} finally {
    			if (fc != null) {
    				fc.close();
    			}
    			if (fis != null) {
    				fis.close();
    			}
    		}
    		return bb != null ? bb.array() : null;
    	}
    Par contre je ne suis pas sûr que cette méthode soit optimale car pour les gros fichier ça donnera sûrement un "Java Heap Space" s'il charge tout en mémoire comme ça. Il faudrait alors se contenter de compter les bytes sans charger en mémoire.

  3. #3
    Membre averti
    Inscrit en
    Juillet 2004
    Messages
    28
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 28
    Par défaut
    ok merci, je vais tenter.


    Phileme

  4. #4
    Membre émérite
    Avatar de sironimo
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2004
    Messages : 669
    Par défaut
    Quel est l'intérêt de charger en mémoire si l'on souhaite seulement connaître la taille du fichier ?

    edit : réponse sur la ICI pour connaître la taille d'un fichier.

  5. #5
    Membre Expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Par défaut
    Citation Envoyé par sironimo
    Quel est l'intérêt de charger en mémoire si l'on souhaite seulement connaître la taille du fichier ?

    edit : réponse sur la ICI pour connaître la taille d'un fichier.
    C'est pas ce que je fais
    Je charge en mémoire pour d'autres besoins car je crée un système de GED avec gestion de modèles de documents OpenOffice. Pour le moment l'application ne va pas gérer de fichiers volumineux ni en trop forte quantité simultanée donc je ne me suis pas penché sur une solution m'évitant de charger tout en mémoire... mais ça viendra tôt ou tard. Le problème également c'est que l'ancien programme utilisait des Blob en BDD (donc là il n'y a pas trop le choix, il faut charger en mémoire - ou alors je connais pas d'autre solution).

    Sinon effectivement, j'avais mal lu la javadoc de .length()

Discussions similaires

  1. [JSP] Connaitre la taille d'un fichier
    Par dst dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 21/06/2004, 17h22
  2. Réponses: 5
    Dernier message: 15/04/2004, 13h24
  3. [Debutant] Comment lire la taille d'un fichier binaire ?
    Par Invité dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 18/12/2003, 19h20
  4. fonction réduisant la taille d'un fichier
    Par Harry_polin dans le forum C
    Réponses: 22
    Dernier message: 27/11/2003, 13h56
  5. [VB6] [Réseau] Récupérer la taille d'un fichier avec inet
    Par pcpunch dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 20/02/2003, 21h38

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