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
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
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.
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.
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; }
ok merci, je vais tenter.
Phileme
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 laICI pour connaître la taille d'un fichier.
C'est pas ce que je faisEnvoyé par sironimo
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()![]()
Partager